使用window.open打開新窗口被瀏覽器攔截的解決方案

問題描述:ajax

代碼中直接使用window.open('//www.baidu.com', '_blank');會被瀏覽器窗口攔截瀏覽器

緣由
瀏覽器爲了維護用戶安全和體驗,在JS中直接使用window.open(url,"_blank")來打開新的連接是會被攔截的。
一般項目須要在ajax異步請求完成後來打開新連接,下面提供幾種解決方案安全

解決方案app

1.最經常使用的在ajax異步請求成功後打開新窗口異步

//先在ajax函數以前打開新窗口後再加載url
    $('#btn').click(function () {
        // 打開頁面,此處最好使用提示頁面
        var newWin = window.open();
        newWin.document.body.innerHTML="正在加載中......";
        $.ajax({
            url: 'www.###.com',
            success: function (url) {
                // 重定向到目標頁面
                newWin.location.href = url;
            }
        })
    });

2.利用a標籤跳轉,能解決大多數瀏覽器兼容問題,可是這種方不適用於ajax異步請求回調中打開新窗口,在ajax異步請求完成後調用無效(用戶點擊事件觸發)函數

function newWin(url){ //新窗口打開
        var a = document.createElement('a');
        a.setAttribute('href', url);
        a.setAttribute('style', 'display:none');
        a.setAttribute('target', '_blank');
        document.body.appendChild(a);
        a.click();
        a.parentNode.removeChild(a);
    };
     document.body.addEventListener('click', function() {
           newWin('http://www.baidu.com');
        });
相關文章
相關標籤/搜索