window.open拦截及解决方案

在ajax请求过程中,想在请求成功后打开一个新的页面,于是就想到了通过js window.open()来实现,但是最终都被拦截了。

有关window.open()的基本使用可以参考mozilla提供的API文档:window.open

原因分析

查询一番资料才明白,大部分现代浏览器(泛指Chrome/Firefox/IE10+/Safari),都开启了默认阻止弹出窗口的策略。这是因为是windoew.open被广告商滥用,严重影响用户的使用。浏览器会根据用会的行为来判断这次的window.open是否属于流氓操作。

正常情况下,用户点击事件内,触发打开一个新窗口

  obj.onclick = function () {
        window.open( url );
  }

通过用户事件触发的新窗口打开,这种形式打开新窗口浏览器会认为是用户自己需要的,大多浏览器是不会拦截的。

我们希望在ajax请求成功后,触发打开新窗口,但这样是会被浏览器拦截的,那么我们该如何解决呢?

解决方案:

借助一个中间页面

我们在用户点击后就打开一个空白窗口,然后再ajax返回成功后给空白窗口一个url,这样就不会被拦截了。

  $obj.click(function(){
            var newTab=window.open('about:blank');
            $.ajax({
                sucssess:function(data){
                    if(data){
                        //window.open('http://www.baidu.com');
                        newTab.location.href="http://www.baidu.com";
                    }
                }
            })
        })

注:使用setTimeout延迟打开新页面,也会被拦截哦!

这是我的第一篇文章,有写的不好的地方希望大佬指出,希望我的文章能帮到你,欢迎留言评论!!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容