【问题标题】:How pass window handler from one page to another? (JavaScript)如何将窗口处理程序从一个页面传递到另一个页面? (JavaScript)
【发布时间】:2012-02-13 20:32:59
【问题描述】:

我有一个很奇怪的问题,请不要问我为什么需要这个…… 我有一个page1。 Page1 有一个使用 window.open 函数打开新窗口(page2)的链接。 chatWindow 是从 window.open 函数返回的子窗口的处理程序。 现在我从第 1 页移动到第 3 页(通过链接<a href="...." target="_self">Some Text</a>)。如果 page2 关闭或打开,我需要检查 page3。 如何将处理程序 chatWindow 从 page1 传递到 page3?

提前谢谢你!

【问题讨论】:

    标签: javascript


    【解决方案1】:

    在 page2 和 page3 上,您可以使用 window.opener 引用 page1。在 page1 中,你可以定义一个方法来检查 page2 是否仍然打开:window.open 返回一个新窗口的实例,null 如果窗口已经关闭。

    请注意,如果它们位于同一域中,您只能从窗口中读取属性。如果他们来自不同的域,您可以使用window.postMessage 方法启用通信。

    假设他们在同一个域,可以使用如下代码(概念代码):

    window.page2 = window.open('...');
    window.page3 = window.open('...');
    
    // At page3:
    if (window.opener && window.opener.page2 != null) { // Not null or undefined
        // Do something
    }
    

    为了方便起见,我使用了全局变量。一个更好的实现可以包含一个命名空间:

    window.openedWin = {};
    window.openedWin.page2 = window.open('...');
    ...
    // At page3:
    if (window.opener && window.opener.openedWin && window.opener.openedWin.page2 ...
    

    【讨论】:

    • 您好 Rob,感谢您对地震的响应。移动到 page3 时我丢失 page1 的问题......
    • @DioNNiS 这是一个不同的问题。您可以向page2 添加一个轮询器,它会定期向page1(和page3)报告他们的存在。例如,这可以通过使用setInterval(function(){window.opener.page2=window;}, 1000); 来完成。窗口关闭时也报告:window.onunload=function(){window.opener.page2=null;};。之前有人问过类似的问题,我responded
    • 是的,看起来,这是唯一合适的解决方案
    猜你喜欢
    • 2011-12-04
    • 2018-06-12
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2011-11-08
    相关资源
    最近更新 更多