为什么window.open(...)。onunload = function(){...}无法正常工作?

时间:2011-09-19 20:07:15

标签: javascript javascript-events window.open window.onunload

我希望能够判断用户关闭我打开的窗口的时间。这是我试图监控此事的代码:

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

我希望这会提醒“hola!”在使用window.open打开的窗口关闭后,在原始窗口中。相反,它警告“hola!”在使用window.open打开新窗口后立即在原始窗口中。它为什么这样工作?有办法做我想做的事吗?

2 个答案:

答案 0 :(得分:25)

窗口首先加载空白页面,然后卸载页面,导致unload事件 然后你的页面加载。尝试在onload事件触发时附加事件以避免此事。

Simple demo

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

答案 1 :(得分:0)

在窗口加载后尝试添加

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 Example