Может ли родительское окно заметить, закрыто ли дочернее окно? - PullRequest
7 голосов
/ 17 января 2011

у меня parent window (opener) и child (popup)

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

Допустим, на родительской странице у меня есть функция js hello()

Чтобы потомок мог вызвать hello () родителя, когда дочернее окно закрыто, а также передать аргумент, я могу сделать,

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

Это закроет окно, а также вызовет hello () родителя;

Но что, если я не хочу иметь код window.opener.hello () на дочерней странице? Я хочу, чтобы код был только на родительской странице

Одна вещь, о которой я могу думать, это:

Отчасти родитель знает, когда ребенок закрыт (слушатель события не уверен в js) Но в таком случае, как получить аргумент? (т.е. некоторые данные от ребенка)

Ответы [ 2 ]

6 голосов
/ 17 января 2011

Очевидное решение (добавление свойства обработчика события 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);

2 голосов
/ 17 января 2011

вы можете прикрепить событие onunload к дочернему окну из родительского

...