无法在Safari中捕获window.open()异常

时间:2017-09-18 19:24:49

标签: javascript safari try-catch

我有一些代码可以打开链接。链接是可配置的,因此我正在做一些基本的错误处理。具体来说,我使用try / catch包装window.open()调用,因为如果URL无效,内置API将引发异常。问题是,在Safari中,捕获量不会受到影响。

我试过浏览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 个答案:

答案 0 :(得分: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!");
      }
    }
  });
});