Search code examples
javascriptdom-eventswindow.openwindow.onunload

Why does window.open(...).onunload = function () { ... } not work as I expect?


I want to be able to tell when a window that I open is closed by the user. This is the code of my attempt at monitoring this:

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

I would expect this to alert "hola!" in the original window after the window that was opened with window.open was closed. Instead, it alerts "hola!" in the original window immediately after opening the new window with window.open. Why does it work like this? Is there a way of doing what I want to do?


Solution

  • The window first loads with a blank page and then unloads the page, causing the unload event.
    Your page then loads. Try attaching the event when the onload event fires to avoid this.

    Simple demo

    document.getElementById('openWindow').onclick = function () {
          var windowref = window.open('tests2.html');
          windowref.onload = function() {
                windowref.onunload =  function () {
                    window.alert('hola!');
                };
          }
    };