【问题标题】:Communication between windows/tabs with JavaScript [duplicate]使用 JavaScript 在窗口/选项卡之间进行通信 [重复]
【发布时间】:2011-06-26 15:11:16
【问题描述】:

我怎样才能让位于同一域中的两个选项卡(或窗口)能够相互通信,而无需另一个窗口实例。

编辑:为什么在另一个问题之前提出此问题时将其标记为重复?

【问题讨论】:

  • +1 有趣。我认为 chrome 的新“可安装应用程序”支持这一点。
  • 关于该主题的一些新闻:stackoverflow.com/questions/19125823/… BNC Connector 仍然是一个选项,一个新选项是使用 localStorage 的 intercom.js,另一个选项是使用共享 webworkers。

标签: javascript windows cross-browser communication


【解决方案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。我在stackoverflow answer 中详细阐述了这两种方法。

      【讨论】:

        猜你喜欢
        • 2011-05-04
        • 2017-02-28
        • 2015-03-29
        • 2011-01-15
        • 2011-01-15
        相关资源
        最近更新 更多