window.open跳转被拦截问题处理

知识简说

window.open 命令在用户操作(trusted events)时, 才会正常的打开应该页面而不会被浏览器拦截

ps : 什么是 trusted events

trusted events is evnet.isTrusted is true. The isTrusted read-only property of the Event interface is a boolean that is true when the event was generated by a user action, and false when the event was created or modified by a script or dispatched via dispatchEvent.

阐述问题

很多时候,我们是需要在做异步请求回来时才能跳转,这时,如果等待到请求返回再去window.open 会被浏览器拦截。

解决方案

  • 场景1,如果是在发送请求后等待请求回来,不管请求结果正确与否都要跳转页面的话

    • 需要在发送请求前先var A = window.open() 一个新窗口。然后等请求结束了,在给这个窗口附上URL


    function clickAction() {
        var openWind = window.open()
        ajaxAgent('POST', 'URL', params).then((resutl)=> {
            opneWind.loaction.href = 'jumpURL'
        })
    }

 
- '注意' 这里会有个问题,如果异步请求的时间过长,会让用户感觉有个空白窗口在哪里晾着O__O …。
  • 场景2,如果是想发送请求后等待请求回来,通过请求结果来决定是否要跳转,这时,就没发通过执行异步请求之前先打开个新窗口的方法来解决了,因为有可能会放回结构是失败,不希望跳转,这时,在去吧空窗口关闭,会给用户带来困惑。

    目前就不能避免被拦截了,只能通知用户,让用户去给被拦截的页面新添加信任。
 

       var openNewWindow = window.open(url);
        // 判断跳转页面是否被拦截了。
        // 如果已经拦截,就给他用户提示
        // 提示的方式可以是引导用户去解决被拦截问题(添加信任)
        if (!openNewWindow || openNewWindow.closed || typeof openNewWindow.closed === 'undefined') {
            alert('您的支付界面窗口已经被浏览器拦截')
        }
    原文作者:安海铭
    原文地址: https://segmentfault.com/a/1190000007804870
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞