移动端window.open跳转链接时,iOS没有反应的问题

问题描述: 使用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);
    }
}