Javascript 发送给父级的postMessage,父级代码未运行

Javascript 发送给父级的postMessage,父级代码未运行,javascript,Javascript,我已经看到了大量的例子,我看不出我错在哪里。但是我的事件侦听器根本没有在父级中运行。事件,如果我在iframe控制台范围内手动发布消息 iframe: $(“.open”)。单击(函数(){ window.parent.postMessage('navigated','*',[]); 家长: window.addEventListener(“加载”,函数(){ document.querySelectorAll('iframe[src*=“forms.localhost”]”)。forEach

我已经看到了大量的例子,我看不出我错在哪里。但是我的事件侦听器根本没有在父级中运行。事件,如果我在iframe控制台范围内手动发布消息

iframe:

$(“.open”)。单击(函数(){
window.parent.postMessage('navigated','*',[]);
家长:

window.addEventListener(“加载”,函数(){
document.querySelectorAll('iframe[src*=“forms.localhost”]”)。forEach(iframe=>{
iframe.addEventListener('消息',(事件)=>{
console.log('event');
});
});

我已检查,查询选择器正在查找我的iframe。

您的父窗口应该侦听父窗口上的消息,而不是
iframe
元素上的消息。单个处理程序将接收来自所有iframe的消息;您可以通过消息上的
来源来区分它们。

谢谢,我查看的所有示例t在iframe上显示事件侦听器!lol@MartynBall-哎呀!:-)有没有办法从
消息中获取iframe元素
?我需要在发布该消息时基本上找出iframe的位置。@MartynBall-很抱歉,我从未尝试过这样做。不过,我想到的一种方法是使用消息的
来源
,并在
iframe
上使用CSS选择器>'s
src
attribute…?呃,但是
origin
可能只包含源信息,而不是完整的URL.:-|第二个想法:您可以将某种合成ID作为查询参数传递给iframe,它可以包含在消息的数据中,并将该ID用作
ifram上的
数据ID
属性e
元素。