2011-02-13 47 views
4

如何让位于同一个域的两个选项卡(或窗口)能够相互通话而不必让另一个窗口实例相互通话。使用JavaScript在窗口/选项卡之间进行通信

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

+1

+1有趣。我认为Chrome的新“可安装应用程序”支持这一点。 – JCOC611 2011-02-13 23:20:20

+0

有关该主题的一些消息: http://stackoverflow.com/questions/19125823/how-is-it-possible-to-share-single-js-resource-between-browser-tabs/19165781#19165781 BNC连接器仍然是一种选择,一个新选项是使用localStorage的intercom.js,另一个选项是使用共享webworkers。 – inf3rno 2013-10-03 23:05:14

回答

0

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

1

我找到了一种方法,我可以在每个页面上使用LocalConnection制作两个Flash动画,以使用externalinterface在另一个页面上调用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); 
}; 

和发送器SWF:

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代码,但它不会执行,直到您回到该标签(我已经问了一个问题为什么,并且没有任何反应)

+1

有关您如何做到这一点的任何链接?是否支持跨浏览器? – 2011-03-01 01:34:22

0

我只想有一个JavaScript在页面加载执行,将连续轮询(window.setInterval)的sessionStore的一个标记,有人给我发一个消息,然后宣读了该消息sessionStore,然后做任何需要的。

1

即使在HTML5之前,如果文档具有相同的来源,也支持在不同的JavaScript执行上下文之间进行通信。如果不是,或者您没有提及其他Window对象,则可以使用随HTML5引入的新的postMessage API。我在这stackoverflow answer中详细阐述了两种方法。

相关问题