我有 2 个单独的页面,每个页面都打开一个到服务器的网络套接字,一个页面向服务器发送一条消息,有什么办法可以让另一个页面收到回复?非常感谢任何帮助。
谢谢
第一页,连接并等待消息
<html>
<head>
<script type="text/javascript" charset="utf-8">
if("WebSocket" in window) {
var ws = new WebSocket("ws://localhost:12345/server.php");
}
function startSocket() {
if("WebSocket" in window) {
ws.onopen = function (event) {
document.getElementById('status').innerHTML = "open: " + this.readyState;
}
ws.onmessage = function (message) {
alert(message.data);
}
}
}
</script>
</head>
<body onLoad="startSocket()">
<div id="status">
</div>
<div id="stock">
</div>
</body>
</html>
第二页通过 web scoket 向服务器发送消息
<html>
<script type="text/javascript" charset="utf-8">
if("WebSocket" in window) {
var ws = new WebSocket("ws://localhost:12345/server.php");
}
function startSocket() {
if("WebSocket" in window) {
ws.onopen = function (event) {
document.getElementById('status').innerHTML = "open: " + this.readyState;
}
}
}
function send() {
var text = "hello";
try {
ws.send(text);
} catch (exception) {
alert(exception.Description);
}
}
</script>
<body onLoad="startSocket()">
<div id="status"></div>
<div id="stock"></div>
<button onClick="send();">Left!</button>
</body>
</html>
最佳答案
如果第二个页面由第一个页面创建并指定了名称,并且两者都在同一个域中,则您可以使用其名称访问第二个页面中的脚本。
这与将信息从 iframe 传递到其包含的网页完全相同。如果这两个页面位于不同的域中,安全性会阻止此工作,因为这将成为 XSS 攻击的目标。
直流
在您的示例中,页面之间没有通信。从您的评论中我看到您正在尝试实现聊天系统。所以不,他们不能互相交谈。
抱歉,我认为这两个页面都托管在同一个浏览器中。
当您连接到 server.php 时,您并不是连接到同一脚本两次,而是连接到同一脚本的两个独立副本。所以除非你在服务器 php 中做一些工作来获取消息并返回它,否则不会传回任何消息
默认情况下,server.php 将在 30 秒后断开连接。所以你需要禁用它。
你想做的事情比你想象的要复杂得多
直流
关于javascript - 在另一个浏览器中从网络套接字接收返回的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4942679/