Как запустить функцию родительского окна при закрытии дочернего окна? - PullRequest
10 голосов
/ 11 июля 2009

Я уже задавал этот вопрос раньше, и проблема была наполовину решена в том смысле, что мне помогли выяснить, что Javascript имеет жесткую защиту на месте.

Что я узнал : родительское окно открывает дочернее окно. Дочернее окно перенаправляется в другой домен и возвращается обратно. Он пытается отключить функцию родительского окна после закрытия самого себя.

window.opener.startLoad();

Это приводит к проблеме с разрешениями (безопасностью) и не будет работать.

(Половина) Новая проблема : Как получить окно для открытия дочернего окна и, когда оно закрывается, запустить функцию в родительском окне?

Мне нужен очень эффективный способ сделать это, так как это будет часто происходить!

Спасибо за любую помощь.

Ответы [ 2 ]

21 голосов
/ 11 июля 2009

Попробуйте это:

var win = window.open(url, name);
win.onunload = afterChildClose; // afterChildClose() is the function.
win.close(); // afterChildClose() should fire now.

Весь этот код будет расположен и выполнен в javascript родительского окна (включая afterChildClose ()). Вы создаете окно и назначаете функцию событию unload.

О, одна вещь, о которой я только что подумал. Если дочернее окно обновляется или переходит на другой URL-адрес, также запускается событие onunload. Если вы хотите, чтобы событие происходило только при закрытом окне, вы должны включить проверку afterChildClose () на win.closed.

РЕДАКТИРОВАТЬ: Вот код для двух образцов страниц, которые я собрал, чтобы попробовать это.

Родительское окно:

<html>
<body>
<script type="text/javascript">
    var win = window.open("secondwindow.html", "woo");
    win.onunload =onun; 

    function onun() {
        if(win.location != "about:blank") // This is so that the function 
                                          // doesn't do anything when the 
                                          // window is first opened.
        {
            alert("closed");
        }
    }
</script>
</body>
</html>

дочернее окно ("secondwindow.html"):

<html>
<body>
<script type="text/javascript">
    setTimeout('window.close();', 5000);
</script>
</body>
</html>

Когда я пытаюсь открыть первый документ в Firefox, он открывает окно, окно ждет 5 секунд и выходит, а в первом документе отображается alert (), поэтому он работает, даже когда подокно закрывается.

3 голосов
/ 21 августа 2014

Я попал сюда в поисках аналогичной функциональности, но никак не мог заставить ее работать с кросс-браузерной совместимостью Итак, вот еще один способ выполнить код при закрытии дочернего окна:

var win = window.open("http://www.google.com");

var winClosed = setInterval(function () {

    if (win.closed) {
        clearInterval(winClosed);
        location.assign("http://www.bing.com/");  //Execute your code here
    }

}, 250);

Он не использует обработчики событий из дочернего окна и не нуждается в изменении содержимого дочернего окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...