7

我有parent window (opener)child (popup)

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

假设,在父页面中,我有 js 功能hello()

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

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

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

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

我能想到的一件事是:

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

4

2 回答 2

6

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

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);

于 2011-01-17T09:58:56.637 回答
2

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

于 2011-01-17T01:55:09.517 回答