gpt4 book ai didi

javascript - Window.postMessage() 问题

转载 作者:行者123 更新时间:2023-11-28 15:19:47 25 4
gpt4 key购买 nike

如果我使用不同的域,我无法获取任何数据。如果我在同一台服务器上运行它,则没有问题 - 会获得消息。

index.html:

<head>
<title>Test 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
function popupResize() {
var popup = window.open('popup.html', '', 'resizable=yes,scrollbars=yes,width=500,height=500');
// var popup = window.open('https://foo/index.html', '', 'resizable=yes,scrollbars=yes,width=500,height=500');
window.addEventListener(
'message',
function(event) {
console.log(event.data);
},
false
);
}
</script>
</head>
<body>
<a href='javascript:void(0)' onClick="popupResize(); return false;">Go!</a>
</body>

popup.html:

    <head>
<title>Game history details</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script>
function postSize() {
var h = 100;
var w = 200;
opener.postMessage([h, w], '*');
}
</script>
</head>
<body onload="postSize();">
test 1
</body>

如何让它使用不同的服务器工作?

最佳答案

问题 1

popup.addEventListener(

您需要在原始窗口上监听事件,而不是在弹出窗口上。弹出窗口是消息的来源位置,而不是发送位置。

使用window.addEventListener(或只是addEventListener(

问题2

{h, w}

IE、Opera、Safari 或 Android Mobile 的 ES6 简写属性名称为 not supported。最好避免使用它们。

问题3

parent.postMessage({h, w}, '*');

您正在向打开的窗口发送消息,而不是向父框架发送消息。没有父框架(因此 parent 递归到 window)。

应该是:

 opener.postMessage({h: h, w: w}, '*');

问题 4

<script type="text/javascript">
var popup = window.open('popup.html', '', 'resizable=yes,scrollbars=yes,width=500,height=500');

除非响应用户事件,否则您的脚本无权打开新窗口。该代码需要移至函数中,然后从单击事件等调用。

<小时/>

If I run it on the same server, no problem with it - message is obtained.

这是问题 1 和问题 3 的结合导致的。您将事件处理程序绑定(bind)到弹出窗口(如果它位于同一源,则只能从打开的窗口执行此操作),并且您从弹出窗口向其自身发布一条消息(因为 parent === window).

<小时/>

在我的测试中有效的完整代码,尽管不是最佳实践:

http://localhost:7007/index.html

<!DOCTYPE html>
<html>
<script>
addEventListener("message", function (event) {
document.body.appendChild(document.createTextNode(event.data));
});
function pop() {
window.open("http://127.0.0.1:7007/popup.html");
}
</script>
<input type="button" onclick="pop()">

http://127.0.0.1:7007/popup.html

<!DOCTYPE html>
<html>
<script>
opener.postMessage([123, 456], '*');
</script>
<h1>popup</h1>

关于javascript - Window.postMessage() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32013259/

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