Javascript Chrome非活动选项卡未执行setInterval
我喜欢在工作时通过Youtube上的Chrome标签听音乐,但每小时音乐都会停止,并显示一条消息“你还在吗?”。 是的,我仍然在那里,就像每天一样,一天7次:) 因此,我安装了一个名为“自定义样式表和脚本”的Chrome扩展来运行这个简单的JavaScript: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
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,并在这里发布我的结果!