使用JavaScript在窗口/选项卡之间进行通信
如何让位于同一个域的两个选项卡(或窗口)能够相互通话而不必让另一个窗口实例相互通话。使用JavaScript在窗口/选项卡之间进行通信
编辑:当在另一个问题之前询问时,为什么这被标记为重复?
我能想到的唯一方法就是使用XHR。每个窗口/选项卡都与服务器进行通信,而服务器又与其他窗口进行通信,这几乎与gmail聊天工作方式相同。除了你在同一个客户端上有2个窗口,而不是2个客户端上的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代码,但它不会执行,直到您回到该标签(我已经问了一个问题为什么,并且没有任何反应)
有关您如何做到这一点的任何链接?是否支持跨浏览器? – 2011-03-01 01:34:22
我只想有一个JavaScript在页面加载执行,将连续轮询(window.setInterval)的sessionStore的一个标记,有人给我发一个消息,然后宣读了该消息sessionStore,然后做任何需要的。
即使在HTML5之前,如果文档具有相同的来源,也支持在不同的JavaScript执行上下文之间进行通信。如果不是,或者您没有提及其他Window
对象,则可以使用随HTML5引入的新的postMessage API。我在这stackoverflow answer中详细阐述了两种方法。
+1有趣。我认为Chrome的新“可安装应用程序”支持这一点。 – JCOC611 2011-02-13 23:20:20
有关该主题的一些消息: 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