解決 safari window.open 無法實現的問題
先說下問題是什么吧: safari 中沒辦法在回調函數里面執行window.open, 原因是safari的安全機制將其阻擋了(具體的原因可能需要你自己深入研究)..
那么如果你有這樣的需求(或者類似的),通過ajax 發送請求到服務器端,等待請求響應成功之后,根據從服務器端響應得到的數據,打開一個窗口顯示給用戶,在safari上是沒辦法直接一個window.open搞定的( 瀏覽器沒問題, IE, firefox, chrome).
那么window.open 在safari 中 只有當用戶觸發事件之后才能被調用成功的,怎么解決這個問題呢? 很簡單, 繞過這個該死的安全機制,在你調用ajax請求之前,打開這個窗口, 然后在回調函數里面修改新打開窗口的location, 這樣就解決了。這個解決方案是我前兩天從國外一位兄臺的博客上找到的,相信國內的某些兄弟可能會用到,所以在此發出來,希望能對你有所幫助。
簡單示例代碼如下(假設應用jquery):
***
pg.find('\[name=gotoAccountSet]').unbind('click').click(function(){
var winRef = window.open("", "_blank");//打開一個新的頁面
App.post('accountSet/getServerName.do',{id:id},function(data){
var ro = mac.eval(data);
if(ro.success){
function loc(){
var ll = 'http://'+ro.data.info+'.teenydata.com/'+name+'/index.jsp';
winRef.location = ll;//改變頁面的 location
}
setTimeout(loc(),800);//這個等待很重要,如果不等待的話將無法實現
}
})
});
***