Javascript 带greasemonkey的不同onload脚本在youtube中给出了不同的行为

Javascript 带greasemonkey的不同onload脚本在youtube中给出了不同的行为,javascript,greasemonkey,Javascript,Greasemonkey,我有一个简单的脚本,可以在页面中创建一个跨度,其中包含flash player API获取的一些信息。 我试过三种方法: 1) 如果我将脚本放在无onload或: (函数(){…这里的代码…})() 这无法正确加载我的所有代码,尤其是播放器信息部分: var spanSound=document.createElement('span'); Fls_div.appendChild(spanSound); spanSound.appendChild(document.createTextNode(

我有一个简单的脚本,可以在页面中创建一个跨度,其中包含flash player API获取的一些信息。 我试过三种方法:

1) 如果我将脚本放在无onload或: (函数(){…这里的代码…})()

这无法正确加载我的所有代码,尤其是播放器信息部分:

var spanSound=document.createElement('span');
Fls_div.appendChild(spanSound);
spanSound.appendChild(document.createTextNode("  audioLev:")); // --OK--

var player = window.document.getElementById('movie_player');
var spanQual= document.createElement('span');
spanQual.appendChild(document.createTextNode("-->" + player.getPlaybackQuality() ));  // --NO--
但所有youtube的评论都已加载

2) 我将所有代码放入:

window.onload = function(){  ...code here... }
这确实正确加载了我的所有代码,但它没有加载youtube的评论

3) 最后我试着:

window.addEventListener("load", function(e) { ...code here... }, false);
这将加载所有正确的代码和注释


为什么会有这3种不同的行为(特别是第2种行为)?

1-代码在加载任何其他行为之前运行。当您尝试document.getElementById之类的操作时,元素还不存在,因此您的代码找不到它

2-您正在替换window.onload函数。看起来该页面已经有一个onload函数(负责加载注释…?),当您向其分配另一个函数时,第一个函数将被替换,不再运行

3-您正在添加事件侦听器。一个页面中可以有多个事件侦听器,当事件发生时,所有事件侦听器都将执行(与window.onload相比,在window.onload中只能执行一个函数)