gpt4 book ai didi

javascript - 两个窗口或选项卡之间的跨文档消息传递,而不是 IFrame

转载 作者:太空宇宙 更新时间:2023-11-04 16:25:50 25 4
gpt4 key购买 nike

我已经在站点和 iframe 之间整合了一个跨文档消息传递实现。效果很好。但我希望在选项卡之间而不是 iframe 进行通信。

这是我的代码,用于 iframe 通信,分为两部分。第一个是母版页,另一个是远程或从属页。

所以,这里是 MASTER 页面......

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Cross-Document Messaging Receiver</title>

<!-- <script type='text/javascript' src='js/xDocMess.js'></script> -->

<link rel="stylesheet" type="text/css" href="css/xDocMess.css">
<script type="text/javascript">
function sendMessage() {
//select the iframe containing the message receiver remote script
var remoteframe = document.getElementById("remotepage");

//Get the users message from the message input box
var message = document.getElementById("message").value;

//Check that the message is not blank
if (message !== "") {
remoteframe.contentWindow.postMessage(message, 'http://localhost:8081');
}
else {
alert("You cannot send a blank message!");
}
}

</script>
</head>
<body>
<h1>Cross-Domain Messaging Example</h1>
<div id="controls">
<label>Enter your message to be sent to the iframe: </label>
<input type="text" id="message" />
<button id="sendmessage" onclick="sendMessage();">Send Message</button>
<p>(Note: Only alphanumeric characters will be printed!)</p>
</div>
<h3>Remote Script iframe</h3>
<iframe id="remotepage" src="http://localhost:8081/remote.html"></iframe>
</body>

现在,远程站点在这里...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Remote Receiver</title>


<link rel="stylesheet" type="text/css" href="css/normalize.css">

<style type='text/css'>
body {
font-family: sans-serif;
padding: 10px;
}
h3 {
padding-bottom: 5px;
}
#messages {
font-size: small;
border-top: 1px solid #000;
padding-top: 10px;
}

</style>
<script type='text/javascript'>//<![CDATA[
window.onload=function(){
function receiver(message) {
//get the message container html element (in this case, the messages div)
var messagecontainer = document.getElementById("messages");
var trusteddomain = "http://localhost:8081";

//Get the time of message receipt
var currenttime = new Date();
//format the time into a user readable format
var formattedtime = currenttime.getHours() + ":" + currenttime.getMinutes() + ":" + currenttime.getSeconds();


var msgcontent = message.data;
//check the content of the message only contains letters and numbers to prevent xss attacks
if (msgcontent.match(/^[A-Za-z0-9]+$/)) {
messagecontainer.innerHTML += "message received @ " + formattedtime + ": " + message.data + "<br />";
} else {
messagecontainer.innerHTML += "Illegal characters found in the message received @ " + formattedtime + ". Message rejected<br/>";
}
}
}
</script>
</head>
<body>
<h3>Messages Received:</h3>
<div id="messages"></div>
</body>
</html>

解决方案在于如何调用 window.open而不是在 MASTER 中调用 IFRAME:<iframe id="remotepage" src="http://localhost:8081/remote.html"></iframe>并更改发送消息代码行: var remoteframe = document.getElementById("remotepage");并能够将消息传递到窗口。我有一个心理障碍...

任何帮助将不胜感激...

TIA

丹尼斯

最佳答案

如果我理解你的问题,我相信你需要做的就是在你调用 window.open 时命名你的窗口,然后在你的代码中使用这个引用,就像你使用 iframe 的 contentWindow 一样:

var myWindow = window.open('newTab.html');
myWindow.postMessage('You\'re a nice looking window', 'http://yourtargetdomain.com');

然后您可以将“消息”处理程序放入 newTab.html 文档中

window.addEventListener('message', function (event) { 
// security check ...
console.log('message: ' + event.data);
});

关于javascript - 两个窗口或选项卡之间的跨文档消息传递,而不是 IFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25384729/

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