您如何在两个浏览器选项卡/窗口之间进行通信? [复制]

Posted

技术标签:

【中文标题】您如何在两个浏览器选项卡/窗口之间进行通信? [复制]【英文标题】:How do you communicate between two browser tabs/windows? [duplicate] 【发布时间】:2011-05-09 06:03:49 【问题描述】:

我有一个 Web 应用程序,它在新的浏览器窗口/选项卡中作为第二个 Web 应用程序启动。当用户在第二页提交输入时,我想更新原始页面上的内容。

现实世界的例子:

Google 在Gmail 中使用了这种行为。撰写新消息时,如果您单击“收件人”链接,它会在新的浏览器窗口中显示您的联系人列表。这使原始的撰写电子邮件窗口保持打开并处于活动状态以供输入,而用户可以随时从联系人列表中选择电子邮件收件人。当他们提交该窗口时,选定的电子邮件地址将添加到原始撰写窗口的收件人列表中。

这是如何实现的?我想它可以使用Ajax 来完成,但理想情况下,该解决方案将避免通过服务器路由它所需的往返/编程逻辑。

作为参考,我的技术堆栈是一个 ASP.NET MVC 应用程序,它启动了第二个 ASP.NET MVC 应用程序,其中包含一个 Silverlight 应用程序。两个应用程序都可以/确实使用 jQuery。

【问题讨论】:

【参考方案1】:

我不认为你的意思是两个标签。 Gmail 所做的是在弹出窗口和父级之间进行通信。

假设您使用 javascript 打开了一个新窗口。在打开的窗口中你可以:

opener.someFunction() 传回数据。让我找到一个可靠的例子并粘贴它。

这是一个很好的例子。 http://www.javascriptkit.com/javatutors/remote2.shtml

你可以用开瓶器做很多事情。

【讨论】:

这看起来像我想要使用的。我尝试了您链接中的简单测试。适用于 Firefox 和 IE,但在 Chrome 中失败。父窗口的颜色永远不会更新。知道为什么吗? @Amir:你可能想把这个例子粘贴到这里,也许在代码 sn-p 中,以防 JavaScriptKit 网站出现故障。 此解决方案能否在经过身份验证的网站中利用相同的会话? 这种方法不适用于 IE(至少 10、11 和 Edge)。我想将选定的文件从孩子发送到开启者。我在这里问了一个问题:***.com/q/43681241/1660192【参考方案2】:

你有两种可能:

    持续轮询(setInterval 和 AJAX) 推送(Comet 和 HTML 5 WebSocket API)

【讨论】:

eeh 可能会轮询选项卡,但不会打开新窗口。 :)

以上是关于您如何在两个浏览器选项卡/窗口之间进行通信? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

浏览器窗口之间是不是可以进行基于事件的通信? [复制]

使用 JavaScript 在窗口/选项卡之间进行通信 [重复]

在带有两个控制器的角度材质的新选项卡中打开一个新的html

在没有窗口参考的选项卡dom之间进行通信[重复]

JavaScript;具有相同来源的选项卡/窗口之间的通信[重复]

JavaScript;具有相同来源的选项卡/窗口之间的通信[重复]