我从JavaScript中打开一个标签,并尝试跟踪其关闭时间。但是没有任何事件被触发。我只找到onbeforeunload
引用当前窗口的示例,而不引用其他窗口对象。
window.addEventListener('DOMContentLoaded', () => {
document.querySelector('#youtube-open').addEventListener('click', () => {
document.yTT = window.open('https://youtube.com', '_blank');
document.yTT.addEventListener('close', () => {
console.log('onclose fired');
});
document.yTT.addEventListener('beforeunload', () => {
console.log('onbeforeunload fired');
});
document.yTT.addEventListener('unload', () => {
console.log('onunload fired');
});
});
});
JS控制台中没有任何错误。就是行不通。有什么想法吗?
答案 0 :(得分:0)
您无法访问浏览器的其他窗口实例。绕过的一种方法是使用本地存储(可以从上面列出的事件访问),存储一些交叉表数据和轮询机制(在主选项卡中)以获取状态。
答案 1 :(得分:0)
是的,可以跟踪关闭窗口的时间。
您的document.yTT
变量保存WindowProxy
返回的window.open()
对象。不幸的是,该对象不会发出您尝试收听的事件。但是它将保留一个属性,指示是否已关闭窗口。
如果要在关闭窗口时调用函数,可以执行以下操作:
window.addEventListener('DOMContentLoaded', () => {
document.querySelector('#youtube-open').addEventListener('click', () => {
document.yTT = window.open('https://youtube.com', '_blank');
document.yTTInterval = setInterval(() => {
if (document.yTT.closed) {
clearInterval(document.yTTInterval);
executeSomeFunction();
}
}, 1); // or whatever interval works for you, the longer the less consuming
});
});