問題描述: 使用window.open跳轉連結時安卓可以正常跳轉,但是iOS蘋果上沒有反應
問題原因:
-
使用者互動限制
iOS 對於 window.open 的呼叫有嚴格的使用者互動要求。如果 window.open 不是在使用者互動(如點選事件)的上下文中呼叫的,可能會被瀏覽器阻止。 -
彈出視窗攔截
某些瀏覽器可能會預設攔截彈出視窗,尤其是當使用者沒有明確的互動動作時。 -
JavaScript 執行順序
如果 window.open 被放在非同步操作之後,可能會導致問題。
【解決方案】在使用者互動事件的回撥中立即執行 -
iOS Safari 特性
iOS Safari 對於 window.open 的行為有一些特定的限制。例如,window.open 可能不會在某些情況下開啟新標籤頁,而是會在同一個標籤頁中導航。(與1類似) -
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);
}
}