我在 JavaScript 中编写了一个小代码,它在流媒体音乐网站(潮汐、spotify napster 等)上播放音乐并每 x 秒更改一次。当最后一首歌曲正在收听时,它会循环播放播放列表的第一首歌曲。(我这样做是因为 tidal.com 网站管理员没有实现循环整个播放列表的功能)。
我在 firefox 和 chrome 上使用 Greasemonkey 和 Tampermonkey 注入了我的 javascript,当我打开 10 个标签时我遇到了问题(所以 10 个 javascript 循环一起工作)。我是初学者,所以也许我的代码真的很糟糕,告诉我。
所以代码并不复杂,我得到了允许我控制歌曲(下一首/暂停/第一首歌曲)的 DOM 元素,当我的条件为真时,我在这些按钮上单击()。当我打开一个选项卡时它可以工作,我可以看到它正在发挥它的作用。
但问题是,当我在打开 10 或 15 个标签的情况下运行它时,我的浏览器似乎停止了我的 javascript,因为我不在页面上。我可以看到,只要我回到页面,脚本就会醒来并开始工作。(例如,有时我回到一个页面,我可以看到一首 2:00 的歌曲,而我在我的代码中设置了下一首歌曲,时间是 35 秒。)
所以:我的代码是完全错误的还是浏览器?Chrome/Firefox 也是如此。顺便说一句,我通过直接使用控制台( F12 )注入进行了测试,结果是一样的。
//First track of the playlist
var firstTrack;
//Next button
var next;
//current time
var time;
var lastTrackPlaying; //null if we are not on the last track
var paused; //null if we are playing
function initVar() {
firstTrack = document.querySelector("button[title='Lire']");
next = document.getElementsByClassName("play-controls__next js-next")[0];
setInterval(checkTime,5000); //every 5sec, call checkTime
}
function checkTime() {
time = document.getElementsByClassName("js-progress")[0].innerHTML;
time = 60*Number(time[0]) + Number( time[2] + time[3]); //convert the time to int format
lastTrackPlaying = document.querySelector("tr[class='js-tracklist__row ui-draggable ui-draggable-handle is-active is-playing'][data-track-id='86656183']");
paused = document.getElementsByClassName("play-controls__main-button js-main-button play-controls__main-button--paused")[0];
if( (lastTrackPlaying != null) && ( time >= 35 ) ) firstTrack.click(); //we are on last song, play first
else if ( time >= 35 ) next.click(); //next song if 35 sec spent
else if ( paused != null) firstTrack.click(); //if the playlist is paused, play the first song
}
setTimeout(initVar, 5000); //start the code with 5sec delay ( the website load )