与JavaScript之间的窗口/标签之间的通信

我怎样才能有两个标签(或窗口)在同一个域可以相互交谈,而不必有一个窗口实例的另一个。

编辑:为什么这被标记为重复时,这是另一个问题之前呢?

Solutions Collecting From Web of "与JavaScript之间的窗口/标签之间的通信"

我找到了一种方法,我可以使用LocalConnection在每个页面上制作两个Flash动画,以使用外部接口在另一个页面上调用JavaScript。

把这个放在一个AS3 SWF,这是接收器:

import flash.external.ExternalInterface; import flash.net.LocalConnection; var mLocalConnection:LocalConnection; mLocalConnection = new LocalConnection(); mLocalConnection.connect("xivioview"); mLocalConnection.client=this; function recieveText(textRecieved):void { ExternalInterface.call(textRecieved); }; 

和发件人瑞士法郎:

 import flash.external.ExternalInterface; import flash.net.LocalConnection; function sendtoview(con,val):String { //create local connection for sending text var sending_lc:LocalConnection; sending_lc = new LocalConnection(); sending_lc.send("xivioview", "recieveText", val); return "kk" } ExternalInterface.addCallback("sendtoview", sendtoview); 

这是设置为单向的,并使用它的JavaScript:

 document.getElementById("youembeddedobject").sendtoview("xivioview","alert('Hai!')") 

这将在接收器的选项卡中执行该JavaScript代码,但它不会执行,直到你回到该选项卡(我已经问了一个问题,为什么,并没有反应)

即使在HTML5之前,如果文档具有相同的来源,也支持在不同的JavaScript执行上下文之间进行通信。 如果没有,或者您没有其他Window对象的引用,那么您可以使用HTML5中引入的新postMessage API 。 我在这个计算器的答案阐述了两种方法。

我能想到的唯一方法就是使用XHR。 每个窗口/选项卡都与服务器进行通信,而服务器又与其他窗口进行通信,几乎与Gmail聊天工作方式相同。 除了你将在同一个客户端上有2个窗口,而不是2个客户端上的1个窗口。

我只是有一个JavaScript执行页面加载,将连续轮询(window.setInterval)sessionStore为一个标志说有人给我发了一条消息,然后从sessionStore读取该消息,然后做任何需要的。