您如何在两个浏览器选项卡/窗口之间进行通信? [复制]
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 在窗口/选项卡之间进行通信 [重复]