没有从iframe接收postMessage

postMessage not being received from iframe

本文关键字:接收 postMessage iframe      更新时间:2023-09-26

以下是带有src="example.com" 的iframe中的代码

<script>
    var domain = "http://example2.com";
    function redirectRequest(){
        console.log("window.opener",window.opener); // NULL
        console.log("window.top",window.top); // script_name
        console.log("window.parent",window.parent); // script_name
        opener.postMessage("redirect", domain); //fails because null
       //top and parent also do not work BUT do not display errors
    }
</script>

这里是在example2.com中运行的代码,它包含postMessage接收器(也包含iframe):

function message_listener(event) { //nothing is ever received...
   console.log("event received",event); 
   var data = event.data;
   console.log("data received",data);
}

if (window.addEventListener) {
   window.addEventListener("message", message_listener);
} else {
   // IE8
   window.attachEvent("onmessage", message_listener);
}

知道可能会发生什么吗?非常感谢。。。

对于iframe,您需要将opener替换为parent。替换此:

opener.postMessage("redirect", domain);

到此:

window.parent.postMessage("redirect", domain);

在我的案例中,出于某种原因,这有帮助:

// Inside iframe
window.parent.socket.postMessage('msg example', '*');