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