Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome非活动选项卡未执行setInterval_Javascript_Google Chrome_Google Chrome Extension_Youtube - Fatal编程技术网

Javascript Chrome非活动选项卡未执行setInterval

Javascript Chrome非活动选项卡未执行setInterval,javascript,google-chrome,google-chrome-extension,youtube,Javascript,Google Chrome,Google Chrome Extension,Youtube,我喜欢在工作时通过Youtube上的Chrome标签听音乐,但每小时音乐都会停止,并显示一条消息“你还在吗?”。 是的,我仍然在那里,就像每天一样,一天7次:) 因此,我安装了一个名为“自定义样式表和脚本”的Chrome扩展来运行这个简单的JavaScript: setInterval(function(){ let overlay = document.querySelector('iron-overlay-backdrop'); if(overlay) overlay.cli

我喜欢在工作时通过Youtube上的Chrome标签听音乐,但每小时音乐都会停止,并显示一条消息“你还在吗?”。 是的,我仍然在那里,就像每天一样,一天7次:)

因此,我安装了一个名为“自定义样式表和脚本”的Chrome扩展来运行这个简单的JavaScript:

setInterval(function(){
    let overlay = document.querySelector('iron-overlay-backdrop');
    if(overlay) overlay.click();
}, 1000);
这很有效,但前提是我在YouTube上。如果我在做另一个,音乐最终会停止,我必须点击YT标签才能运行这个JavaScript(所以这毕竟不是一个真正的胜利)

我发现一些帖子提到,非活动选项卡中的setInterval优先级较低,每秒只触发一到两次,在我的情况下,它们根本不会触发


感谢您提供有关查看内容的提示:)

经过一些测试,我发现点击“确定”按钮确认已被YouTube禁用。如果chrome选项卡未激活,setInterval毕竟工作正常

如果有人感兴趣,我尝试了wOxxOm建议的MutationObserver方法,而不是单击确认按钮,我只是重新加载页面

下面是我现在使用的代码:

if(-1 !== window.location.host.indexOf('youtube')) {
    document.addEventListener('DOMContentLoaded', (event) => {

        let popupContainer = document.querySelector('ytd-popup-container');

        let observer = new MutationObserver(function(mutationsList) {
            let confirmButton = popupContainer.querySelector('.yt-confirm-dialog-renderer paper-button');
            if(confirmButton){
                // confirmButton.click();
                document.location.reload(true);
            }
        });

        observer.observe(popupContainer, {childList: true});
    });
}

可能网站在后台时没有显示
ytd app
,因此你的if分支无法运行。事实上,我后来添加了ytd app测试,这样就不会在每个选项卡上执行此代码。如果YT花了一个小时才想知道你是否在那里,那么你就不需要将
setInterval()
设置为每秒工作一次。为什么不将它设置为10分钟,所以将1000更改为600000。其想法是,在非活动选项卡中调用过多的
setInterval()
最终会完全停止它,而每10分钟调用一次可能不会。我建议使用MutationObserver而不是setInterval。我将查看MutationObserver,并在这里发布我的结果!