使用 JavaScript 在窗口/选项卡之间进行通信 [重复]
Posted
技术标签:
【中文标题】使用 JavaScript 在窗口/选项卡之间进行通信 [重复]【英文标题】:Communication between windows/tabs with JavaScript [duplicate] 【发布时间】:2011-06-26 15:11:16 【问题描述】:我怎样才能让位于同一域中的两个选项卡(或窗口)能够相互通信,而无需另一个窗口实例。
编辑:为什么在另一个问题之前提出此问题时将其标记为重复?
【问题讨论】:
+1 有趣。我认为 chrome 的新“可安装应用程序”支持这一点。 关于该主题的一些新闻:***.com/questions/19125823/… BNC Connector 仍然是一个选项,一个新选项是使用 localStorage 的 intercom.js,另一个选项是使用共享 webworkers。 【参考方案1】:我能想到的唯一方法是使用 XHR。每个窗口/选项卡都与服务器通信,服务器又与其他窗口通信,这与 gmail 聊天的工作方式几乎相同。除了您将在同一个客户端上拥有 2 个窗口,而不是在 2 个客户端上拥有 1 个窗口。
【讨论】:
【参考方案2】:我找到了一种方法,我可以使用 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 代码,但在您返回该选项卡之前它不会执行(我已经问了一个问题为什么,但还没有回复)
【讨论】:
关于你是如何做到这一点的任何链接?是否支持跨浏览器? 有来源。它应该适用于每个浏览器,顺便说一句,您可以更改“xivioview”文本,它是 connectionID。 Silverlight 也是如此。有一个 LocalConnection 对象可以在本地机器上的 Silverlight 控件之间进行本地通信。【参考方案3】:我只需要在页面加载中执行一个 javascript,它会不断地轮询 (window.setInterval) sessionStore 以获取一个标志,表明有人向我发送了一条消息,然后从 sessionStore 读取该消息,然后执行所需的任何操作。
【讨论】:
【参考方案4】:如果文档来源相同,甚至在 html5 之前就支持不同 JavaScript 执行上下文之间的通信。如果没有,或者您没有引用其他 Window
对象,那么您可以使用 HTML5 引入的新 postMessage API。我在*** answer 中详细阐述了这两种方法。
【讨论】:
以上是关于使用 JavaScript 在窗口/选项卡之间进行通信 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript;具有相同来源的选项卡/窗口之间的通信[重复]