使用 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;具有相同来源的选项卡/窗口之间的通信[重复]

在没有窗口参考的选项卡dom之间进行通信[重复]

您如何在两个浏览器选项卡/窗口之间进行通信? [复制]

您如何在两个浏览器选项卡/窗口之间进行通信? [复制]

AngularJS - 在选项卡/窗口之间共享一个 websocket

如何在javascript中的另一个子窗口的选项卡中打开子窗口?