Javascript GreaseMonkey+;Youtube+。单击()

Javascript GreaseMonkey+;Youtube+。单击(),javascript,youtube,click,greasemonkey,Javascript,Youtube,Click,Greasemonkey,目标:我加载一个YouTube播放列表,然后GreaseMonkey单击()s“无序播放列表”按钮 我可以在我的控制台中直接运行这两条线路,它工作得非常完美: var shuffleBtn = document.querySelector(".yt-uix-button.shuffle-playlist"); shuffleBtn.click(); 然而,当我尝试将它移动到GreaseMonkday时,它不再工作。 下面代码中的console.log确实会运行,并且(注释掉的)remove()

目标:我加载一个YouTube播放列表,然后GreaseMonkey
单击()
s“无序播放列表”按钮

我可以在我的控制台中直接运行这两条线路,它工作得非常完美:

var shuffleBtn = document.querySelector(".yt-uix-button.shuffle-playlist");
shuffleBtn.click();
然而,当我尝试将它移动到GreaseMonkday时,它不再工作。 下面代码中的
console.log
确实会运行,并且(注释掉的)
remove()
会工作,但是
click()
不会触发。我也尝试了无jQuery位,但也没有成功

我错过了什么

// ==UserScript==
// @name        YouTube - Randomize Playlist
// @namespace   ytplaylistrandom
// @include     https://www.youtube.com/watch?v=yyDUC1LUXSU&list=PLh6vppUwmWEMdp04u-tYABoDmgn9AX12n
// @version     1
// @grant       none
// ==/UserScript==

window.onload = function () {
    var shuffleBtn = document.querySelector(".yt-uix-button.shuffle-playlist");
    if( shuffleBtn ){
      console.log('exists');
      shuffleBtn.click();
      //shuffleBtn.remove();
      console.log('end');
    }else {
      console.log('nobutton');
    }
}
我想我明白了:

使用
window.addEventListener(“加载”,function(){
..
})
而不是
window.onload=function(){
..
}

似乎
窗口
已经有了一个
onload
函数,它初始化了shuffle按钮的功能,脚本正在覆盖它。

我想我得到了它:

使用
window.addEventListener(“加载”,function(){
..
})
而不是
window.onload=function(){
..
}


似乎
窗口
已经有了一个
onload
函数,它初始化了shuffle按钮的功能,脚本正在覆盖它。

我已经对它进行了一点测试……它实际上应该可以工作,因为在GreaseMonkey中编程点击并没有被阻止(我已经做了很多次)。我想,可能按钮没有正确初始化,但即使通过
setTimeout
延迟执行,它似乎也不起作用。当用户脚本执行时,洗牌按钮“丢失”了它的两个
click
事件侦听器中的一个:,但是。是的,我也用
setTimeout
尝试过它——和
.trigger('click')
——并用jQuery尝试了整个过程……我已经测试了一点……它应该可以工作,因为程序化的点击在GreaseMonkey中没有被阻止(我已经做了很多次)。我想,可能按钮没有正确初始化,但即使通过
setTimeout
延迟执行,它似乎也不起作用。当用户脚本执行时,洗牌按钮“丢失”了它的两个
click
事件侦听器中的一个:,但是。是的,我也用
setTimeout
试过了——还有
.trigger('click')
——并且用jQuery试过了整个过程……很有效,谢谢!为了清楚起见,我仍然必须用
setTimeout
@frogg3862来包装它,这真的很奇怪……没有它对我来说很有效。我还添加了
click()
s到
。toggle loop
来制作播放列表循环,以及
.ytp next按钮
来继续下一首歌(启动“随机化”),谢谢!为了清楚起见,我仍然必须将它包装在一个
setTimeout
@frogg3862中,这真的很奇怪……没有它,它对我来说很有效。我还将
click()
s添加到
。切换循环
,使播放列表循环-
.ytp下一步按钮
移动到下一首歌曲(启动“随机化”)