項目使用ajax post后根據返回的success,需要打開一個新頁面,使用window.open發現谷歌瀏覽器直接被攔截。
后來了解發現該操作並不是用戶主動觸發的,所以它認為這是不安全的就攔截了,即使 ajax 回調函數中模擬執行 click 或者 submit 等用戶行為(trigger('click')),
瀏覽器也會認為不是由用戶主動觸發的,因此不能被安全執行,所以也會被攔截。廢話不多說,直接上終極解決辦法
解決方法:
var newwin = window.open(); // 這句必須在ajax之前定義 $.ajax({ type: 'POST', url: '/do.php', dataType: 'json', error: function(){ newwin.close(); }, success: function(data){ newwin.location = data.url; } });
也沒首頁會打開一個空白頁面隨后跳轉到返回的url上,期間時間間隔很短。如果異步請求執行快幾乎沒有啥影響。
經測谷歌/360瀏覽器正常。
網上很多人說改成同步syns。。其實沒實際卵用,它必須響應時間極短才能見效,不信大家可以試試,但是上面的代碼在微信上行不通
微信不支持window.open ,至少我的安卓微信上是無法通過window.open打開窗口的,但是可以通過self.location.href='new.html'打開。
總結:上面通過window.open開始就打開空白頁,體驗不好,對於ajax 頁面跳轉打開新窗口確實沒啥好的辦法,還要兼顧微信和手機瀏覽器的兼容性問題:
最終我直接改成頁面跳轉,解決微信和其他瀏覽器的兼容問題:目前各瀏覽器和微信上一切正常:
$(document).ready(function () { $.post("/do.php", { order_sn: "111111" }, function (data) { var data = eval("(" + data + ")"); if(data.tatus==1) self.location.href = "";// 跳轉到新頁 }); });