2014-01-18 65 views
1

我已经多次使用过jQuery,但我只是意识到,虽然我没有做任何事情来等待或检查要加载的jQuery插件,但运行jQuery代码并没有遇到问题。我的典型代码是:是否需要检查jQuery库是否已加载?

<html> 
... 
    <script type="text/javascript" src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script> 
... 
<body> 
    ... 
</body> 
<script> 
    //jQuery code, eg: 
    $('#xxx').load('yyyy.html'); 
    ... // more code 
</script> 
</html> 

然后最近,我经历了从codeorigin.jquery.com有时失败或采取20s左右加载文件。在使用Chrome浏览器时,我注意到Chrome浏览器不会呈现HTML页面,也不会执行其中的JavaScript代码,直到引用的外部脚本文件的加载活动完成(可能是成功或失败)为止。这很好。

我的问题:它是一个标准的浏览器规范,浏览器总是会等待加载页面中引用的所有外部脚本才能在呈现和执行html页面之前完成吗?或者,浏览器是否只是按顺序执行页面,等待每一个完成后再移到下一行,而不是异步?或者没有定义的顺序,网络设计人员有责任在使用它们之前确保所有外部脚本已准备就绪?

+1

加载不是异步。如果您将脚本放在标题中,它们将在到达主体之前加载并执行。 – Cristy

+1

同意,将您的脚本标记移动到正文的底部。除非添加async或defer属性,否则在运行之后,脚本将被评估。 –

回答

0

我相信你只是幸运而已!可能您的浏览器缓存了该文件,因此很容易获得。是!有需要检查。我遇到了图书馆或资源不可用的问题,例如使用Google地图。并不能保证浏览器会做什么。当它看到内联脚本时,它会立即执行它。想想<script>document.write("hello")</script>。浏览器将异步获取多个资源以加速下载。

也就是说,最好的做法是在加载整个文档后使用<body onload="initialize();">开始运行脚本。如果你在一个单独的JS文件中有一个自包含的脚本,你可以确定它不会运行,直到加载。我一直在做的CoffeeScript最近,和脚本在不同的文件,它们附加处理程序<body>所以它只能运行在页面加载:

$(document).ready -> 
    $("#comments").on "click", ".aComment", ->