Safari 在尝试使用 Javascript try/catch 访问父窗口对象时未捕获异常

Safari not catching exception when trying to access parent window object with Javascript try/catch

本文关键字:窗口 访问 对象 捕获异常 catch try Javascript Safari      更新时间:2023-09-26

所以下面的代码可以通过小提琴链接看到工作。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 控制台,但 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/