如何检测使用window.open()打开的窗口关闭事件

时间:2019-01-04 07:28:43

标签: javascript addeventlistener

我正在尝试检测使用JavaScript中的window.open()打开的窗口关闭事件。但是由于某种原因,它似乎不起作用。

这是我的代码:

<html>
<head>
   <script>
     var clicktest = function() {
        var newwindow = window.open("https://www.google.com",'myPopupwindow', "height=640,width=960,toolbar=no,menubar=no,scrollbars=no,location=no,status=no");
        newwindow.addEventListener("beforeunload", function (e) {
          console.log('hey');
        });
     }
   </script>
</head>
<body>
    <button onclick="clicktest()">hey</button>
</body>
</html>

我也尝试使用

newwindow.onbeforeunload = function () {
    console.log('hey');
}

代替了window.addeventlistener(),但是两者都没有用,我确实尝试使用window代替newwindow,但仍然没有用。

1 个答案:

答案 0 :(得分:1)

对于跨域文档,唯一的解决方案是轮询弹出窗口对象的.closed属性。

但这是一件非常丑陋的事情,所以请稍等一下您为什么需要它。

要限制丑陋程度,您可以使用电池友好型here来为轮询供电:

const popup = window.open('https://google.com');
waitForClose(popup, e=>console.log('closed'));

function waitForClose(win, cb) {
  function poll() {
    if(win.closed) {
      cb();
    }
    else {
      requestAnimationFrame(poll);
    }
  }
  poll();
}

requestAnimationFrame,因为StackSnippet的iframe不允许弹出窗口。