2017-09-18 16 views
1

リンクを開くコードがあります。リンクは設定可能で、基本的なエラー処理をしています。具体的には、window.open()呼び出しをtry/catchでラップしています。これは、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

関連する問題