我有两个网页 - 主持人和儿童(见下文)。主机网页托管在我本地网络上的服务器上。子页面托管在我的计算机上。 Host页面在window.open()
调用中使用“localhost”打开子页面。然后,子页面使用window.postMessage()
方法将消息发回主机页面。
在IE和Chrome中,postMessage()从“localhost”页面工作到另一台服务器上托管的页面。在Edge中,它不起作用。甚至在主页上都没有触发“message”事件。
现在,如果我将Host页面放在不在我本地网络上的服务器上,则postMessage()方法可以正常工作并触发“message”事件。 IE有一个内联网与互联网站点的概念,我想知道Edge是否有相同的概念,除了没有办法配置它。
我在这里做错了什么或者从“localhost”页面到主页的消息是什么?
谢谢!
主机页面(托管在我网络上的其他服务器上):
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Post Message Test</title>
<script>
function setup() {
window.addEventListener('message', function (event) {
var messagesEl = document.getElementById("messages");
messagesEl.innerHTML += "- Received message from " + event.origin + "<br/>";
});
}
function openChildWindow() {
window.open('http://localhost/sandbox/PostMessageTest_child/child.html', '_blank', 'left=100;top=100;width=100;height=100');
}
</script>
</head>
<body onload="setup()">
<button onclick="openChildWindow()">Open Child Window</button>
<p id="messages"></p>
</body>
</html>
子页面(在localhost上托管的child.html):
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script>
function postMessage() {
window.opener.postMessage("Test Message", "*");
}
</script>
</head>
<body>
<button onclick="postMessage()">Post Message</button>
</body>
</html>