JavaScript_解決safari瀏覽器window.open無法實現的問題


解決 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 sel = pg.find('select option:selected');
   var id = sel.attr("id");
   var name = sel.html(); 
   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);//這個等待很重要,如果不等待的話將無法實現
    }
   })
  });


免責聲明!

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



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