【问题标题】:Is it possible for parent window to notice if child window has been closed?父窗口是否可以注意到子窗口是否已关闭?
【发布时间】:2011-01-17 01:49:50
【问题描述】:

我有parent window (opener)child (popup)

----------                      --------------
|         |                     |            |
| parent  | -----> opens popup  |  child     |
|         |                     |            |
-----------                     --------------

假设在父页面中,我有js函数hello()

为了让孩子在子窗口关闭时调用父母的 hello() 并传递一个参数,我可以这样做,

window.close();
window.opener.hello(someArgument);

这将关闭窗口并调用父级的 hello();

但是如果我不想在子页面中有代码 window.opener.hello() 怎么办?我的意思是我希望代码只在父页面中

我能想到的一件事是:

有些父母知道孩子何时关闭(事件监听器???在 js 中不确定) 但在这种情况下如何接收论点? (即从孩子那里返回的一些数据)

【问题讨论】:

    标签: javascript popupwindow


    【解决方案1】:

    显而易见的解决方案(将onunload 事件处理程序属性添加到弹出窗口对象)在 IE 中不起作用。但是,在 IE 中使用 attachEvent 确实有效,因此以下内容可以完成:

    var win = window.open("popup.html");
    
    function doStuffOnUnload() {
        alert("Unloaded!");
    }
    
    if (typeof win.attachEvent != "undefined") {
        win.attachEvent("onunload", doStuffOnUnload);
    } else if (typeof win.addEventListener != "undefined") {
        win.addEventListener("unload", doStuffOnUnload, false);
    }
    

    如果您希望弹出窗口将信息传递到主窗口,我建议在弹出窗口的window 对象中放置一个属性(例如window.someValue = 5;)。在doStuffOnUnload(),然后您可以选择该属性:alert(win.someValue);

    【讨论】:

    • 只是想知道我认为 Firefox 没有办法解决这个问题?
    • @masato-san:这在 Firefox 中对我有用。不适合你吗?
    • 是的,它适用于 Firefox(进入 else 语句),但最终我的子窗口需要传递一个参数。也许我可以尝试将内部函数放入 addEventListener
    • win.addEventListener("unload", function() { doStuffOnUnload(win.isSuccess); }, false);也许像这样在子窗口中定义“isSuccess”
    • @quekshuy:很确定它不会工作:在来自不同域的文档中运行的脚本无法相互通信。
    【解决方案2】:

    您可以将onunload 事件从父窗口附加到子窗口

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      相关资源
      最近更新 更多