JavaScript打开选项卡并跟踪其关闭时间

时间:2020-07-17 14:37:00

标签: javascript

我从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控制台中没有任何错误。就是行不通。有什么想法吗?

2 个答案:

答案 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
    });
});
相关问题