解决弹出的窗口window.open会被chrome浏览器阻止的问题

原因分析

1 当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为浏览器认为这不是用户希望看到的页面

2 在chrome的安全机制里面,非用户触发的window.open方法,是会被拦截的。

var btn = $('#btn');
btn.click(function () {
    //不会被拦截
    window.open('http://cssha.com')
});

如上 window.open是用户触发的时候,是不会被拦截的,可以正常打开新窗口

var btn = $('#btn');
btn.click(function () {
    $.ajax({
        url: 'ooxx',
        success: function (url) {
            //会被拦截
            window.open(url);
        }
    })
});

如上 用户没有直接出发window.open,而是发出一个ajax请求,window.open方法被放在了ajax的回调函数里,这样的情况是会被拦截的

解决方案

先弹出一个页面,再进行ajax请求,这样就不会被拦截, 实例代码如下

var btn = $('#btn');
btn.click(function () {
    //打开一个不被拦截的新窗口
    var newWindow = window.open();
    $.ajax({
        url: 'ooxx',
        success: function (url) {
            //修改新窗口的url
            newWindow.location.href = url;
        }
    })
});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章