window.open在Safari中不能打開

大部分現代的瀏覽器(Chrome/Firefox/IE 10+/Safari)都默認開啓了阻止彈出窗口的策略,緣由是window.open被廣告商濫用,嚴重影響用戶的使用。這個阻止彈出窗口的操做,並非直接封殺window.open(),而是會根據用戶的行爲來判斷此次window.open()是否屬於流氓操做。javascript

這些事件 handler 裏的,但若是是代碼本身觸發的就會被阻止。java

那麼,咱們能夠知道,在Safari中沒法open新窗口,緣由是Safari的安全機制將其阻擋。ajax

那麼,若是咱們的需求是經過Ajax請求數據後,在成功的回調函數中open一個相關的窗口,顯然正常手段是無法在Safari中搞定的。json

那麼,如何解決該問題呢?很簡單,直走不行繞着走,繞過這個安全機制,也就是說在你調用Ajax以前,先打開這個窗口,而後在回調函數裏面修改打開窗口的location,這樣就能夠解決。瀏覽器

示例代碼:安全

var openWin = function(){    var winRef = window.open("url","_blank");
    $.ajax({        type: '',        url: '',        data: '',
        ......
        success:function(json){
            winRef.location = "新的url";
        }
    });
};

  

不過,因爲種種緣由,window.open()常常會被阻止掉,咱們能夠根據window.open()的返回值來判斷其執行狀況,代碼以下:函數

var winOpen = window.open("url",...);if(winOpen == null || typeof(winOpen) == 'undefined'){
    consoel.log("窗口沒法打開,請檢查瀏覽器!");
}else{
    consoel.log("窗口打開成功!");
}

  

這樣的話,就能夠在界面上比較清晰的告知用戶是怎麼回事了。

本文摘自:http://www.imooc.com/article/78876url

相關文章
相關標籤/搜索