当前位置: 首页 > 面试题库 >

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

井宪
2023-03-14
问题内容

我有两个窗口:窗口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选项卡中的聊天都是最新的,这很简洁!


问题答案:

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

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

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



 类似资料:
  • 我正在寻找一种方法,如何在浏览器中的多个选项卡或窗口之间进行通信(在同一个域上,而不是CORS上)而不留下痕迹。有几种解决办法: 使用窗口对象 邮件后传 Cookies 本地存储 第一种可能是最糟糕的解决方案--你需要从你当前的窗口打开一个窗口,然后你只能在保持窗口打开的情况下进行交流。如果您在任何窗口中重新加载该页,则很可能会丢失通信。 第二种方法,使用postMessage,可能可以实现跨源通

  • 我使用以下方法打开带有一些页面内容的new tab(在new process中), http://news.softpedia.com/news/force-google-chrome-to-open-links-in-new-processes-128962.shtml 这起作用了,新的选项卡打开了mypage.html内容。 假设这是myPage(只是示例...)我应该如何访问它? 现在让我们

  • 我有两个网站,例如: foo.example.com bar.example.com 我想发送一些消息之间的网站,如果有打开在不同的标签。 有不同的可能方式: 邮件后传 SharedWorker 本地存储 但每一个都需要相同的来源或对Window.Opener的访问... 如果顶部域相同,则有解决方案浏览器端用于选项卡之间的通信?

  • 问题内容: 我正在寻找一种方法,以在浏览器中的多个选项卡或窗口之间进行通信(在同一个域中,而不是在CORS上)而不会留下痕迹。有几种解决方案: using window object postMessage cookies localStorage 第一个可能是最糟糕的解决方案-您需要从当前窗口中打开一个窗口,然后您只能在保持窗口打开状态下进行通信。如果您在任何窗口中重新加载页面,则很可能失去了通

  • 我已经搜索了很多关于如何使用SlidengTablayout在片段之间进行通信的内容,但还没有找到一个好的答案。我知道使用ActionBar,但我想要的是androidLollipop使用SlidingTabLayout的新方式。我试过了-

  • 问题内容: 在同一浏览器的选项卡/窗口之间进行JavaScript通信的最可靠方法是什么?例如,当选项卡2开始播放音频时,选项卡1以某种方式知道这一点并可以暂停其播放器。 我正在建立一个带有音乐播放器的网站…因此,如果您现在打开该网站的两个标签,则可以同时在两者上播放音乐。这显然是不好的,所以我正在尝试寻找解决方案。 有任何想法吗?谢谢 问题答案: 这是一个旧的答案,我建议使用此处描述的现代版本: