gpt4 book ai didi

javascript - "this"iframe 中的 onerror

转载 作者:行者123 更新时间:2023-11-28 07:26:58 25 4
gpt4 key购买 nike

假设我有一个 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');
};
尽管从 iframe 窗口内部检查 onerror 的值显示原始函数仍然存在,但如果从外部检查,

win.onerror 似乎会发生变化。

但是,我发现这有效:

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

win.test();

这是为什么呢?这是this/范围问题,还是与浏览器相关的问题?

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

最佳答案

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

2) 如果页面确实位于不同的域中,则后一种方法看起来像是 IE 特定的安全漏洞)

基本上,当 iframe 内的脚本规则自己的 onerror 时,在任何情况下都是完全允许的。这背后的想法是,如果您在 iframe 代码中提供这样的函数,则意味着您相信它对于您的目的来说是安全的。但显然你不应该能够从外部注入(inject)这样的函数。

3)如果使用本地文件:://​​页面进行测试,在IE中相当困惑,一切皆有可能。我建议即使在开发阶段也不要使用它,最好建立一个简单的本地 NGINX 服务器。

PS:如果您的页面位于同一域中,则子 IFRAME 的 onerror 应该是可更改的。所以在这种情况下,这是一个 IE 问题。

关于javascript - "this"iframe 中的 onerror,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29543077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com