如何在两个浏览器标签页/窗口之间进行通信?

9
我有一个Web应用程序,在新的浏览器窗口/选项卡中作为第二个Web应用程序启动。当用户在第二个页面提交其输入时,我希望更新原始页面上的内容。
现实世界的例子:
Google在Gmail中使用此行为。当撰写新邮件时,如果单击“收件人”链接,它会在新的浏览器窗口中显示您联系人列表。这将保留原始的撰写电子邮件窗口以便进行输入,同时用户可以随时从联系人列表中选择电子邮件收件人。当他们提交该窗口时,所选的电子邮件地址将添加到原始撰写窗口中的收件人列表中。
如何完成这个任务?我想可以使用Ajax来实现,但理想情况下,解决方案将避免通过服务器路由所需的往返/编程逻辑。
供参考,我的技术堆栈是ASP.NET MVC应用程序,启动包含Silverlight应用程序的第二个ASP.NET MVC应用程序。两个应用程序都可以/会使用jQuery。
2个回答

12

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

所以,假设您使用JavaScript打开了一个新窗口,在打开的窗口中,您可以执行:

opener.someFunction()传递数据回去。让我找一个实例并粘贴它。

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

您可以使用opener做很多事情。


这看起来就是我想要使用的。我在你提供的链接中尝试了简单的测试。在Firefox和IE中完美运行,但在Chrome中失败了。父窗口的颜色从未更新。有什么想法为什么会这样? - Justin
@Amir:如果JavaScriptKit网站崩溃了,你可能想在这里粘贴示例,例如在代码片段中。 - Dan Dascalescu
这个解决方案能否利用已经认证的网站中的同一会话? - Chris SH
1
这种方法在IE(至少是10、11和Edge)上不起作用。我想将子窗口中选择的文件发送给打开者。我在这里提出了一个问题:http://stackoverflow.com/q/43681241/1660192 - Aman Gupta

-2

轮询选项卡可能可以,但不能用于打开新窗口。 :) - Amir Raminfar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接