Почему window.open (...). Onunload = function () {...} не работает так, как я ожидаю? - PullRequest
10 голосов
/ 20 сентября 2011

Я хочу знать, когда открываемое мной окно закрывается пользователем.Это код моей попытки контролировать это:

<html>
  <head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
    <script type="text/javascript">
        window.document.onready = function () {
            document.getElementById('openWindow').onclick = function () {
                var windowref = window.open('tests2.html');
                windowref.onunload =  function () {
                    window.alert('hola!');
                };
            };
        };
  </script>
</head>
<body>
  <button id='openWindow'>Open Window</button>

</body>
</html>

Я ожидаю, что это предупредит "привет!"в исходном окне после того, как окно, открытое с помощью window.open, было закрыто.Вместо этого он предупреждает "Привет!"в исходном окне сразу после открытия нового окна с помощью window.open.Почему это работает так?Есть ли способ сделать то, что я хочу сделать?

Ответы [ 2 ]

26 голосов
/ 20 сентября 2011

Окно сначала загружается с пустой страницей, а затем выгружает страницу, вызывая событие unload.
Ваша страница затем загружается.Чтобы избежать этого, попробуйте прикрепить событие, когда происходит событие onload.

Простая демонстрация

document.getElementById('openWindow').onclick = function () {
      var windowref = window.open('tests2.html');
      windowref.onload = function() {
            windowref.onunload =  function () {
                window.alert('hola!');
            };
      }
};
0 голосов
/ 20 сентября 2011

Попробуйте добавить после загрузки окна

document.getElementById('openWindow').onclick = function () {
    var windowref = window.open('tests2.html');
    windowref.window.onload = function(){  //wait til load to add onunload event
        windowref.window.onunload =  function () {
            window.alert('hola!');
        };
    }
};

Пример JSBin

...