编辑:这个问题可以总结如下:在不同的窗口中,两个单独的html页面如何异步交换信息?
对于课程项目,我必须构建一个基于Web的聊天客户端。教授提供了一个工作服务器。
我有一部分启动并运行 - 任何连接的用户都可以向服务器发送消息,它将被转发给所有连接的用户,并显示在聊天室的主聊天窗口中。
但是,客户端还需要具有发送/接收私人消息的选项。如果发送或接收私人消息,则会打开一个新窗口,显示仅与该用户进行通信的聊天界面。客户端向/从该用户发送/接收的任何未来私人消息都将出现在这个窗口而不是主要的聊天室。
我正在完成损失。收到私人消息后,如何打开新窗口然后继续与该窗口进行通信?如果通过主窗口的websocket连接从该用户收到更多私人消息,则必须将它们发送到该窗口,如果从该窗口向其他用户发送消息,则必须通过主窗口的websocket连接中继消息。
如果可以完成,怎么办呢?
答案 0 :(得分:5)
window.open
返回属于新打开窗口的window
实例。如果在新窗口中打开的地址可以接受same origin policy,则可以修改它及其DOM,就像您可以修改当前活动的窗口一样。
var w,
someElement;
w = window.open('somepage.html', 'some window name', 'width=300,height=200');
someElement = w.document.getElementById('some-element-id');
答案 1 :(得分:0)
我会像这样解决它:
您的页面最初启动并使用setTimeOut类型函数对服务器执行AJAX调用,检查所有“公共”消息。当它想发布消息时,它会进行另一个AJAX调用来发送公共消息。
我可能会向服务器添加另一个AJAX调用,询问“我的私信”吗?服务器可以响应“是的,这是来自用户ID 1234的一个”。然后你可以使用window.open来打开一个名为“FromUserID1234”的窗口。存储该引用(使用zzzzBow的一些答案)。使用该引用,将来收到的任何私人消息,您可以检查是否已打开私人消息窗口。如果是这样,请忽略它,如果没有,则创建一个。这也允许你打开一个私人消息窗口,暂时使用它,关闭它,然后如果从同一个用户收到另一个窗口,它将只打开另一个窗口。
新窗口“FromUserID1234”然后使用AJAX与服务器通信,询问“您是否还有来自用户ID 1234的更多消息?”。服务器可以使用新的响应,也可以发送消息。
对不起,这本身并不是确切的代码,但这是我开始定义问题的地方,然后只是构建通信接口以实现这一切。
答案 2 :(得分:0)
使用SignalR。它侧重于您想要做的事情。快乐的编码! :)