浏览器中的Javascript保存模式

时间:2018-04-14 15:25:15

标签: javascript html memory-consumption

我在JavaScript中制作了一些代码,用于在流媒体音乐网站上播放音乐(潮汐,定点napster等等)并每隔x秒更换一次。当最后一首歌正在收听时,它会循环并播放播放列表中的第一首歌曲。 (我这样做是因为在tidal.com网站管理员没有实现循环整个播放列表的功能)。

我在firefox和chrome上使用Greasemonkey和Tampermonkey注入了我的javascript,当我打开10个标签时,我遇到了问题(所以10个javascript循环一起工作)。我是初学者,所以也许我的代码非常糟糕,请告诉我。

所以代码并不复杂,我得到的DOM元素允许我控制歌曲(下一首/暂停/第一首歌曲),当我的条件成立时,我会点击那些按钮上的.click()。当我打开一个标签时,它可以工作,我可以看到它正在实现其目的。

但问题是,当我用10或15个标签打开它时,我的浏览器似乎停止了我的javascript,因为我不在页面上。我可以看到,只要我回到页面上,脚本就会唤醒并运行。 (例如,有时我回到页面上,我可以看到一首歌是在凌晨2点,当我在我的代码中设置下一个时间为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 )




1 个答案:

答案 0 :(得分:0)

这是因为浏览器倾向于减慢非活动选项卡中的间隔以优化性能。

查看MDN for setInterval

  

非活动标签需要Gecko 5.0(Firefox 5.0 / Thunderbird 5.0 /   SeaMonkey 2.2)

     

从Gecko 5.0开始(Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2),   间隔被夹紧以不超过每秒一次   非活动标签。