1. 程式人生 > >繞過chrome的彈窗攔截機制

繞過chrome的彈窗攔截機制

eww ajax請求 出發 btn 發的 沒有 ces 攔截 click

在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請求,如何在ajax請求完成後再打開新窗口,又不被攔截呢? 接著往下看:

var btn = $(‘#btn‘);
btn.click(function () {

    //打開一個不被攔截的新窗口
    var newWindow = window.open();

    $.ajax({
        url: ‘ooxx‘,
        success: function (url) {

            //修改新窗口的url
            newWindow.location.href = url;
        }
    })
});

上面的代碼中,用戶安點擊按鈕的時候,先打開一個空白頁,再發ajax請求,在ajax回調裏面修改新窗口的.location.href,這樣就不會被攔截

繞過chrome的彈窗攔截機制