window.open()打开新窗口被拦截

Posted 小情绪^_^

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了window.open()打开新窗口被拦截相关的知识,希望对你有一定的参考价值。

window.open( url )是常用的打开新页面的方法,一般都没有问题,但是如果在ajax回调方法里面使用就会被浏览器拦截,因为在浏览器安全机制中,页面弹窗必须是由用户触发的才是安全弹窗,比如说绑定的onclick(),onchange()事件触发,而由ajax或定时器执行的弹窗均为非用户触发,所以会被浏览器安全机制(其他安全软件)理解为非安全弹窗而被拦截。

解决办法一:

<div onclick="testFunc()">点击我呀</div>

function testFunc() {
        var openWindow = window.open();
        $.ajax({
            url: ‘url‘,
            type: ‘POST‘,
            dataType: ‘json‘,
            data: {param1: ‘value1‘},
            success: function(data){
                openWindow.location = data.url;  //在重定向页面链接
            }
        })
    }

缺陷:从发起弹窗,到后面的重定向(指定跳转地址)必须是一条现行流程,如果中途需要用户做交互的校验,那此方法就会有问题,会跳转至一个空白页面。比如:

$.ajax({
            url: ‘url‘,
            type: ‘POST‘,
            dataType: ‘json‘,
            data: {param1: ‘value1‘},
            success: function(data){
                if(window.confirm(‘你确定要跳转吗?‘)) {   //用户确认后才能进行跳转
                    openWindow.location=‘http://www.baidu.com‘;
                }
            }
        })

 

解决方法二:

手动将ajax的请求改为同步请求(async: false),此处就不粘代码了,可自行测试。

缺陷:基本上能解决浏览器的拦截问题,但是解决不了安全软件的拦截

 

以上是关于window.open()打开新窗口被拦截的主要内容,如果未能解决你的问题,请参考以下文章

window.open()打开新窗口被拦截

window.open打开新窗口被浏览器拦截的处理方法

JS window.open()拦截问题解决方案

ajax请求成功后新窗口window.open()被拦截的解决方法

JavaScript打开新窗口被拦截问题

angularjs 中打开新的浏览器窗口(解决window.open(),浏览器拦截问题)