关于javascript:onload handler和src的顺序在脚本元素中是否重要?

Is the order of onload handler and src set important in a script element?

从这个答案中得出:

You should set the src attribute after the onload event, f.ex:

1
2
el.onload = function() { //...
el.src = script;

You should also append the script to the DOM before attaching the onload event:

1
2
3
$body.append(el);
el.onload = function() { //...
el.src = script;

Remember that you need to check readystate for IE support. If you are using jQuery, you can also try the getScript() method: http://api.jquery.com/jQuery.getScript/

我怀疑这是否是问题的正确答案。

那么,设置onload处理程序和src的顺序是否如此重要?我认为浏览器会立即对它们进行评估,因此我认为以下两者之间没有区别:

1
2
el.onload = function() { //...
el.src = script;

1
2
el.src = script;
el.onload = function() { //...

我说的对吗?


@ThinkBiggThinksMall是对的。

我要补充的是,这种行为是WebKit特有的,火狐会将事件处理程序排队,所以在这种情况下,这并不重要。

我不确定规格说明是怎么说的,但是imm-ff行为是正确的。

无论如何,由于webkit的行为是这样的,所以应该始终在声明onload事件之后设置src,否则,缓存媒体将在分析脚本之前激发onload事件。

不过,一个解决方法是在声明onload事件之后再次设置SRC:

1
2
3
4
<img src="someCachedMedia.ext" id="img"/>

  img.onload = doStuff;
  img.src = img.src; // force the onload to fire again

这样,您就可以确定OnLoad事件将启动。另外,应该发出一个请求,因为第一个请求将被缓存。


"el"已经成为你生活中的一部分了吗?如果是这样,当您更改它的onload事件处理程序时,它的内容将不会被评估(因为加载事件已经发生)。

el.onload=函数()/…

如果el尚未添加到页面中,例如,如果您正在构建视图,并且在设置所有内容时将被注入到页面中,那么是的,它的加载事件将在添加到页面中时被激发。

注意"src"中的内容可能取决于"onload"中的内容。