大部分現代的瀏覽器(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("窗口打開成功!"); }
這樣的話,就能夠在界面上比較清晰的告知用戶是怎麼回事了。