尝试使用 Javascript try/catch 访问父 window 对象时,Safari 没有捕捉到异常
Safari not catching exception when trying to access parent window object with Javascript try/catch
因此可以通过 fiddle link 查看下面的代码。 Safari 拒绝捕获异常 - 我假设这可能是因为它不是 'Javascript' 错误?无论哪种方式,如果您在任何其他浏览器中 运行 代码,您将在控制台中看到页面 URL。
该函数的目的是在页面深处执行多个 iframe 时找到页面 URL。如果有人可以确认为什么 Safari 不会捕获错误 and/or 也许会提供解决方案,那就太好了...谢谢!
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);
}
}
虽然 Safari 控制台记录了一个错误,但在跨帧来源访问 window 属性 时,Safari 显然不会抛出 JavaScript 异常。相反,Safari 只是 returns 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/
因此可以通过 fiddle link 查看下面的代码。 Safari 拒绝捕获异常 - 我假设这可能是因为它不是 'Javascript' 错误?无论哪种方式,如果您在任何其他浏览器中 运行 代码,您将在控制台中看到页面 URL。
该函数的目的是在页面深处执行多个 iframe 时找到页面 URL。如果有人可以确认为什么 Safari 不会捕获错误 and/or 也许会提供解决方案,那就太好了...谢谢!
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);
}
}
虽然 Safari 控制台记录了一个错误,但在跨帧来源访问 window 属性 时,Safari 显然不会抛出 JavaScript 异常。相反,Safari 只是 returns 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/