如果子窗口已关闭,父窗口是否可以注意到?

mas*_*san 7 javascript popupwindow

我有parent window (opener)child (popup)

----------                      --------------
|         |                     |            |
| parent  | -----> opens popup  |  child     |
|         |                     |            |
-----------                     --------------
Run Code Online (Sandbox Code Playgroud)

比方说,在父页面中,我有js函数 hello()

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

window.close();
window.opener.hello(someArgument);
Run Code Online (Sandbox Code Playgroud)

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

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

我能想到的一件事是:

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

Tim*_*own 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);
}
Run Code Online (Sandbox Code Playgroud)

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