我正在尝试检测使用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
,但仍然没有用。
答案 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不允许弹出窗口。