移動端window.open跳轉連結時,iOS沒有反應的問題

睡觉对我非常重要發表於2024-10-08

問題描述: 使用window.open跳轉連結時安卓可以正常跳轉,但是iOS蘋果上沒有反應
問題原因:

  1. 使用者互動限制
    iOS 對於 window.open 的呼叫有嚴格的使用者互動要求。如果 window.open 不是在使用者互動(如點選事件)的上下文中呼叫的,可能會被瀏覽器阻止。

  2. 彈出視窗攔截
    某些瀏覽器可能會預設攔截彈出視窗,尤其是當使用者沒有明確的互動動作時。

  3. JavaScript 執行順序
    如果 window.open 被放在非同步操作之後,可能會導致問題。
    【解決方案】在使用者互動事件的回撥中立即執行

  4. iOS Safari 特性
    iOS Safari 對於 window.open 的行為有一些特定的限制。例如,window.open 可能不會在某些情況下開啟新標籤頁,而是會在同一個標籤頁中導航。(與1類似)

  5. URL 格式問題
    確保 URL 格式正確,沒有語法錯誤。

此處我遇到的問題為第一種,如有類似問題,可嘗試採用相同方案進行解決

function skipLink(url){
    // 獲取使用者代理資訊(不考慮代理資訊被偽裝的情況)
    var userAgent = (navigator.userAgent || navigator.vendor || window.opera) || 'Unknown';
    // 檢查是否是iPhone或iPad
    if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
        // 如果是移動裝置,則重定向頁面
        window.location.href = url;
    } else {
        // 否則,在新視窗開啟連結
        window.open(url);
    }
}

相關文章