問題描述: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'); });