javascript - 跨站点 postMessage 未被 addEventListener 拾取
问题描述
我的网页中嵌入了来自 itch.io 的 iframe。iframe 通过 postMessage 向我发送一条消息:
//This gets send from a Unity WebGL game
SendMessageToPage: function (text) {
var convertedText = Pointer_stringify(text);
// Pass message to the page
window.parent.postMessage(convertedText, "*");
}
父网页(我嵌入 iframe 的网站,所以它应该是父网页,对吗?)应该使用事件监听器来获取它:
<script>
alert("Hello") //<-This one fires
window.addEventListener('message', function(event){
alert("Hello from);
if (event.origin != 'https://itch.io') {
alert("Unknown Source");
return;
}
alert("received: " + event.data)
});
</script>
另外我有一个 div 元素来接收消息
<script>
document.getElementById("WriteOut").addEventListener('message', function(e){
document.getElementById("WriteOut").innerHTML="Got Something";
});
</script>
我可以看到 itch 发送的消息出现在控制台日志中,所以我有点怀疑我没有正确配置事件侦听器。该消息也仅在网站加载后很长时间(打开页面后大约 15 秒)才会出现,因此未加载侦听器应该不是问题。
有谁知道发生了什么?据我所知,我通过了正确的论点。
解决方案
我找到了一个修复/真正的问题:由于游戏没有直接在 iframe 中运行,window.parent 没有使用侦听器处理窗口,而是介于两者之间。将其更改为
//This gets send from a Unity WebGL game
SendMessageToPage: function (text) {
var convertedText = Pointer_stringify(text);
// Pass message to the page
window.top.postMessage(convertedText, "*");
}
工作。
推荐阅读
- javascript - 如何进入调试器以获取 react-native 命令?
- ant - 可以将 ANTLR 与 JastAdd 一起使用吗?
- swift - 嵌入在 NavigationButton 中的自定尺寸图像问题。它变成蓝色
- php - PHP目录警告和require的致命错误
- html - 将鼠标悬停在图像上时显示一个按钮
- c++ - 将int值附加到字符串?
- swift - 为什么打印我的对象的一个实例,使其陷入无限循环,并因错误 EXC_BAD_ACCESS 而崩溃?
- node.js - Firebase-admin 处理多种环境
- javascript - 如何计算来自选择下拉字段的值?
- azure-service-fabric - Azure 服务结构 - 实例 VS 副本