解決彈出的窗口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;
        }
    })
});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章