ajax請求window.open()被攔截


項目使用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 = "";// 跳轉到新頁
            });
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM