如何让同一个域中的两个选项卡(或窗口)能够相互通信而无需另一个窗口实例。
编辑:为什么在另一个问题之前询问时,这标记为重复?
答案 0 :(得分:6)
检查一下http://bytes.com/topic/javascript/insights/913606-javascript-communication-between-browser-windows-tabs这里解释的一切。
答案 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读取该消息,然后做任何需要的事情。