ajax請求window.open()被攔截

項目使用ajax post後根據返回的success,須要打開一個新頁面,使用window.open發現谷歌瀏覽器直接被攔截。php

後來瞭解發現該操做並非用戶主動觸發的,因此它認爲這是不安全的就攔截了,即便 ajax 回調函數中模擬執行 click 或者 submit 等用戶行爲(trigger('click')),html

瀏覽器也會認爲不是由用戶主動觸發的,所以不能被安全執行,因此也會被攔截。廢話很少說,直接上終極解決辦法ajax

解決方法:json

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 = "";// 跳轉到新頁
 }); });
相關文章
相關標籤/搜索