【问题标题】:How to Communicate between two browser windows?如何在两个浏览器窗口之间进行通信?
【发布时间】:2009-12-02 20:23:43
【问题描述】:

我有父浏览器窗口 P 。单击按钮时,将打开一个新的浏览器窗口 WIN-A。 然后再次按下相同的按钮,它应该读取 WIN-A 窗口的标题并打开 WIN-B

如何使用 Javascript 实现这一点?

提前致谢

【问题讨论】:

    标签: javascript


    【解决方案1】:

    给定:

    var myWindow = open("foo.bar");
    

    旧方法:更改窗口对象的name属性:

    myWindow.name = "...";
    // in foo.bar:
    setInterval(someFunctionToCheckForChangesInName, 100);
    

    HTML5方法:调用window对象的postMessage方法:

    myWindow.postMessage("...", "*");
    // in foo.bar:
    (window.addEventListener || window.attachEvent)(
      (window.attachEvent && "on" || "") + "message", function (evt) {
        var data = evt.data; // this is the data sent to the window
        // do stuff with data
      },
    false);
    

    【讨论】:

    • 我从未见过 (possibly_present_func_one || possible_present_func_two )( args, args );之前的技术。酷。
    • Trevor:如果.call(the_object_that_is_supposed_to_be_the_parent, args) 不是window 的属性,请不要忘记使用它。
    • 使用花哨的赋值和速记操作很酷,但对于像 SO 这样的主要重点是分享知识的页面,这不是最好的方法。人们对 JS "||" 不满意- 或者作业必须认为它看起来神秘和不直观。
    【解决方案2】:

    最近刚问了一个类似的问题:

    堆栈溢出问题:Quickest way to pass data to a popup window I created using window.open()?

    以此为基础(并且如果 Parent 和 WIN-A 在同一个域中):

    // Put outside click handler
    var winA = null;
    
    // Put inside click handler
    
    if(!winA){
        // Store the return of the `open` command in a variable
        var winA = window.open('http://www.mydomain.com/page1');
    } else {
        var title = winA.document.title;
        // Do something with title
        var winB = window.open('http://www.mydomain.com/page2');
    }
    

    【讨论】:

      【解决方案3】:

      当您调用 window.open 时,它会返回对新打开的窗口的引用。您可以将打开的窗口的引用存储在一个数组中,然后在需要打开另一个新窗口时迭代该数组。

      加布里埃尔

      【讨论】:

        猜你喜欢
        • 2011-05-09
        • 2013-10-21
        • 2017-03-08
        • 2011-05-04
        • 1970-01-01
        相关资源
        最近更新 更多