Safari 在尝试使用 Javascript try/catch 访问父窗口对象时未捕获异常
Safari not catching exception when trying to access parent window object with Javascript try/catch
所以下面的代码可以通过小提琴链接看到工作。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/
相关文章:
- 从另一个窗口访问document.getElementById
- 从子弹出子窗口访问变量
- 如何从Chrome扩展程序的弹出窗口访问后台页面中的对象
- 如何防止 iframe 访问父窗口,但允许父窗口访问 iframe 文档
- 从父窗口访问 iframe 中的 DOM 附加函数
- 从子窗口访问父 URL 时出现问题
- 如何通过javascript从父窗口访问子窗口
- 如何从父窗口访问子窗口 URL
- 从 HTTPS 父窗口访问 iframe 中的 HTTP
- 使用Jquery从iframe内的子窗口访问父窗口滚动事件
- 从一个窗口访问其他选项卡
- 如何在弹出窗口刷新后从父窗口访问弹出DOM
- 从子窗口访问父窗口的角度作用域
- 从弹出窗口访问表行
- Web应用chrome, javascript,添加函数到子窗口,从父窗口访问它们
- 创建一个cookie,通过域B中的弹出窗口访问域a
- 从主窗口访问iframe内部属性
- jQuery多窗口访问和处理程序
- Javascript-从子窗口访问全局变量
- javascript, iframe, security - 从父窗口访问 js 函数时权限被拒绝