2017-09-18 30 views
1

我有一些打開鏈接的代碼。該鏈接是可配置的,因此我正在做一些基本的錯誤處理。具體來說,我使用try/catch來調用window.open()調用,因爲如果URL無效,內置API將引發異常。問題是,在Safari中,捕獲不會受到影響。無法捕捉到Safari中的window.open()異常

我試過翻看Safari API,但找不到任何好的信息。

下面的例子在IE和Chrome中運行得很好,但在Safari中卻不行。

$(function() { 
 
    $('button').on("click", function() { 
 
    try { 
 
     var begin = "http://<"; 
 
     var opentag = "script>"; 
 
     var stuff = "function(){alert('unsafe');}"; 
 
     var all = begin + opentag + stuff; 
 
     window.open(all); 
 
    } catch (e) { 
 
     alert("errr"); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button> 
 
Click ME 
 
</button>

+1

每個窗口在與其他窗口異步運行其自己的JavaScript線程運行。 – Barmar

+0

這不是在另一個窗口中執行代碼的問題。這是,要打開的URL可能是無效的,如果是我想捕捉異常。 – RodgerTheGreat

回答

1

Barmar的評論是正確的,我認爲。一個解決方法是獲取window.open()的返回值並檢查它是否返回任何東西。如果沒有,那麼它可能沒有打開窗戶。在這裏閱讀window.open()文檔: https://developer.mozilla.org/en-US/docs/Web/API/Window/open

$(function() { 
    $('button').on("click", function() { 
    var x = null; 
    try { 
     var begin = "http://<"; 
     var opentag = "script>"; 
     var stuff = "function(){alert('unsafe');}"; 
     var all = begin + opentag + stuff; 

     x = window.open(all); 
    } catch (e) { 
     alert("errr"); 
    } finally { 
     if (!x) { 
     alert("errrrrrrrrr!"); 
     } 
    } 
    }); 
}); 
+1

雖然我仍然不明白爲什麼Safari做這個@ booleanCube的答案給了我一種「捕獲」錯誤的方法。 – RodgerTheGreat