Javascript &引用;这";iframe中的一个错误
假设我有一个iframe,这个iframe包含一些JavaScript:Javascript &引用;这";iframe中的一个错误,javascript,iframe,this,onerror,Javascript,Iframe,This,Onerror,假设我有一个iframe,这个iframe包含一些JavaScript: function triggerError() { throw "error"; } window.onerror = function() { alert('error detected, initial iframe'); } 我们还可以说,在根窗口中,我有一个对iframe的引用,称为“win”。我可以通过调用win.triggerror()触发警报 但是,如果我试图从外部覆盖error函数,它将
function triggerError() {
throw "error";
}
window.onerror = function() {
alert('error detected, initial iframe');
}
我们还可以说,在根窗口中,我有一个对iframe的引用,称为“win”。我可以通过调用win.triggerror()
触发警报
但是,如果我试图从外部覆盖error函数,它将不起作用
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();
为什么会这样?这是一个this/scoping问题,还是一个与浏览器相关的问题
注:不幸的是,我使用的是带有怪癖模式的IE9。1)我认为一般问题不是特定于浏览器的,而是出于安全原因。如果IFRAME不在同一个域上,那么臭名昭著的CORS考虑因素就会起作用。这就是为什么不允许从外部更改onerror的原因
2) 如果页面确实位于不同的域上,则后一种方法看起来像是IE特有的安全漏洞)
基本上,当iframe中的脚本控制自己的onerror时,在任何情况下都是完全允许的。这背后的想法是,如果您在iframe代码中提供这样一个函数,就意味着您相信它对于您的目的是安全的。但显然,您不应该能够从外部注入这样的函数
3) 如果您使用本地文件:://页面进行测试,那么IE中会出现相当混乱的情况,一切都是可能的。我建议即使在开发阶段也不要使用它,最好设置一个简单的本地NGINX服务器
PS:如果你的页面在同一个域上,那么子IFRAME的错误应该是可变的。所以在这种情况下,这是一个IE问题