iframe中的“this”onerror

时间:2015-04-09 15:42:54

标签: javascript iframe this onerror

我们说我有一个iframe,而且这个iframe包含一些JavaScript:

function triggerError() {
    throw "error";
}

window.onerror = function() {
    alert('error detected, initial iframe');
}

我们还要说,从根窗口我引用了这个名为" win"的iframe。我可以通过拨打win.triggerError()来触发提醒。

但是,如果我尝试从外部覆盖错误功能,它将无法正常工作。

win.onerror = function () {
    alert('error detected, set from parent window');    
};
如果在外部检查,

win.onerror 会出现更改,但是从iframe的窗口内部检查onerror的值会显示原始功能仍在那里。

但是,我发现这有效:

win.test = function () {
    this.onerror = function () {
        alert('error detected, set using test()');  
    };  
};

win.test();

这是为什么?这是 /作用域问题,还是与浏览器相关的问题?

注意:不幸的是,我正在使用带有Quirks模式的IE9。

1 个答案:

答案 0 :(得分:0)

1)我认为一般问题不是浏览器特定的,而是出于安全原因。如果IFRAME不在同一个域上,臭名昭着的CORS考虑因素就会起作用。这就是为什么不允许从外部改变onerror的原因。

2)如果页面确实在不同的域上,后一种方法虽然看起来像IE特定的安全漏洞)

基本上,当iframe中的脚本规则自己的onerror时,在任何情况下都完全允许它。这背后的想法是,如果您在iframe代码中提供此类功能,则表示您认为它对您的目的是安全的。但显然你不应该从外面注入这样的功能。

3)如果您使用本地文件:: //页面进行测试,那么IE中的一切都很混乱,一切皆有可能。我建议即使在开发阶段也不要使用它,最好设置一个简单的本地NGINX服务器。

PS:如果您的网页位于同一个网域,那么儿童IFRAME的错误应该是可更改的。所以在这种情况下,这是一个IE问题。