不同的onload脚本与greasemonkey在youtube中给出不同的行为

时间:2014-06-02 22:03:22

标签: javascript greasemonkey

我有一个简单的脚本,可以在页面中创建一个带有flash player API的信息。 我试过三种方法:

1)如果我把脚本没有onload或者:        (function(){... code here ...})();

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

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 个答案:

答案 0 :(得分:2)

1 - 代码在加载任何其他内容之前运行。当你尝试像document.getElementById这样的东西时,元素还不存在,所以你的代码找不到它。

2 - 您正在替换window.onload函数。看起来页面已经有一个onload函数(负责加载注释......?),当你为它设置另一个函数时,第一个函数将被替换,不再运行。

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