一尘不染

Javascript; 具有相同来源的选项卡/窗口之间的通信

javascript

我有两个窗口:窗口A和窗口B。

  • 窗口A和窗口B具有相同的域
  • 窗口A和窗口B没有任何父窗口。

问题:

  1. 窗口A是否可以获得窗口B的引用?
  2. 使窗口A通知窗口B的最优雅方法是什么?
    (包括新的HTML5规范)

我知道这样做的两种方式:

  • 服务器发送消息:窗口B经常询问服务器,窗口A是否已通知某些内容
  • 通过本地数据(HTML5)进行消息传递:当窗口A要通知其更改本地数据的内容时,窗口B会定期检查本地数据是否有任何更改。

但是这两种方式并不那么优雅。
例如,最好获得窗口B的引用并使用window.postMessage()(HTML5)

最终目标是制作类似facebook的东西,如果您打开4个facebook选项卡并在一个选项卡中聊天,则每个facebook选项卡中的聊天都是最新的,这很简洁!


阅读 314

收藏
2020-04-25

共1个答案

一尘不染

我坚持使用问题中提到的共享本地数据解决方案localStorage。就可靠性,性能和浏览器兼容性而言,这似乎是最佳的解决方案。

localStorage 已在所有现代浏览器中实现。

storage其他 标签更改为时,会触发该事件localStorage。这对于通讯目的非常方便。

2020-04-25