【问题标题】:Safari not catching exception when trying to access parent window object with Javascript try/catchSafari 在尝试使用 Javascript try/catch 访问父窗口对象时未捕获异常
【发布时间】:2015-03-30 06:51:42
【问题描述】:

所以可以通过小提琴链接看到下面的代码。 Safari 拒绝捕获异常 - 我假设这可能是因为它不是“Javascript”错误?无论哪种方式,如果您在任何其他浏览器中运行代码,您都会在控制台中看到页面 URL。

该函数的目的是在页面深处执行多个 iframe 时找到页面 URL。如果有人能确认为什么 Safari 无法捕捉到错误和/或可能提供解决方案,那就太好了......谢谢!

function logURL() {
    var oFrame = window, 
        exception = false;

    try {
        while (oFrame.parent.document !== oFrame.document) {
            oFrame = oFrame.parent;
        }
    } catch (e) {
        exception = true;
    }

     if(exception) {
         console.log('excepted', oFrame.document.referrer);
     } else {
         console.log('no exception', oFrame.location.href);
     }
}

http://jsfiddle.net/HPu9n/82/

【问题讨论】:

  • 在我的电脑 Safari 控制台中显示 url。也不例外stackoverflow.com/questions/28241940/…
  • 谢谢 Sandro- 这是在 OSX 上运行的 Safari 的一个问题,你也在 OSX 上吗?
  • 我可以在 OS X 上的 Safari 7.1.3 中重现这个。
  • 我是 Safari 7.0.3 版和 OS X 10.9.2 版
  • 在 Safari 9.1.2 中仍然是一个问题。感觉他们不会解决这个问题。

标签: javascript macos exception safari try-catch


【解决方案1】:

虽然向 Safari 控制台记录了错误,但 Safari 在跨帧来源访问窗口属性时显然不会引发 JavaScript 异常。相反,Safari 只会为任何不可跨域访问的属性返回 undefined

有了这些知识,我们可以简单地检查是否设置了oFrame.parent.document,如果没有设置,则中断循环并执行如果浏览器抛出异常会发生什么。

示例(JSFiddle):

function logURL() {
    var oFrame = window, 
        exception = false;

    try {
        while (oFrame.parent.document !== oFrame.document) {
            //Check if document property is accessible.
            if (oFrame.parent.document) {
                oFrame = oFrame.parent;
            }
            else {
                //If document was not set, break the loop and set exception flag.
                exception = true;
                break;
            }
        }
    } catch (e) {
        exception = true;
    }

    if(exception) {
        console.log('excepted', oFrame.document.referrer);
    } else {
        console.log('no exception', oFrame.location.href);
    }
}
logURL();

日志:

excepted http://jsfiddle.net/ggh0a0f4/

【讨论】:

  • 啊哈!谢谢Alexander-我仍然对Safari为什么会这样表现感到困惑,尽管我当然不会为此失眠;)非常感谢您的帮助,当然值得赏金!事后看来,解决方案似乎很简单,尽管与这些事情一样,需要正确的视角来解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-09
相关资源
最近更新 更多