Javascript 为什么iframe内部的iframe可以';不做window.top.addEventListener?
我有一个iframe应用程序,它像这样注册事件侦听器(此iframe插入到另一个域中):Javascript 为什么iframe内部的iframe可以';不做window.top.addEventListener?,javascript,html,iframe,cross-domain,Javascript,Html,Iframe,Cross Domain,我有一个iframe应用程序,它像这样注册事件侦听器(此iframe插入到另一个域中): 但是,如果我添加第二个iframe,则不会发送我的消息: <iframe src="example.com/main"> <iframe src="example.com/test" onload="window.top.addEventListener('message', (event) => { co
但是,如果我添加第二个iframe,则不会发送我的消息:
<iframe src="example.com/main">
<iframe src="example.com/test" onload="window.top.addEventListener('message', (event) => {
const data = {
url: window.location.origin
};
event.source.postMessage(JSON.stringify(data), event.origin);
});
"/>
</iframe>
在第二种情况下,我得到
VM2818:2未捕获的DomeException:阻止具有原点“example.com”的帧访问跨原点帧。
我需要此功能来检测iframe的托管位置(在哪个网站上)
是什么导致了这个错误?我该怎么修
谢谢 你不能,在第一个例子中看到@Teemu为什么对我有效?第一个示例中的onload回调是在另一个域的上下文中执行的,而不是我的example.com?在第二个示例中,onload回调是在example.com上下文中执行的,因为它被放置在另一个iframe中?
<iframe src="example.com/main">
<iframe src="example.com/test" onload="window.top.addEventListener('message', (event) => {
const data = {
url: window.location.origin
};
event.source.postMessage(JSON.stringify(data), event.origin);
});
"/>
</iframe>