在另一个浏览器中从Web套接字接收返回的消息

时间:2011-02-09 08:24:45

标签: javascript html websocket

我有两个单独的页面,每个页面都打开一个到服务器的Web套接字,一个页面向服务器发送一条消息,是否有其他页面可以接收回复?非常感谢任何帮助。

由于

第一页,连接并等待消息

<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>

第二页通过网络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>

1 个答案:

答案 0 :(得分:2)

如果第二个页面是由第一个页面创建的,并且两个名称都在同一个域中,则可以使用其名称访问第二个页面中的脚本。

与将信息从iframe传递到其包含的网页完全相同。如果两个页面位于不同的域中,则安全性会阻止此操作,因为这将是XSS攻击的目标。

DC

在您的示例中,页面之间没有通信。从您的评论中我发现您正在尝试实施聊天系统。所以不,他们不能互相交谈。

抱歉,我认为这两个页面都托管在同一个浏览器中。

当您连接到server.php时,您没有连接到同一脚本两次,而是连接到同一脚本的两个独立副本。因此,除非你在服务器php中做一些工作来获取消息并返回它,否则不会传回任何消息

默认情况下,server.php将在30秒后断开连接。所以你需要禁用它。

你要做的事情比你想象的更复杂

DC