使用JavaScript在窗口/标签之间进行通信

时间:2011-02-13 23:18:11

标签: javascript windows cross-browser communication

如何让同一个域中的两个选项卡(或窗口)能够相互通信而无需另一个窗口实例。

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

5 个答案:

答案 0 :(得分:6)

答案 1 :(得分:1)

我找到了一种方法,我可以使用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);
};

发件人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代码,但在返回该选项卡之前它不会执行(我已经问过一个问题为什么,并且还没有响应)

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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