【问题标题】:Is there a need to check whether the jQuery library has loaded?是否需要检查 jQuery 库是否已加载?
【发布时间】:2014-01-18 13:48:07
【问题描述】:

我已经多次使用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 的文件有时会失败或需要大约 20 秒才能加载。使用 Chrome 时,我注意到 Chrome 不会呈现 html 页面,也不会执行其中的 JavaScript 代码,直到引用的外部脚本文件的加载活动完成(可能是成功或失败)。这太棒了。

我的问题:在呈现和执行 html 页面之前,浏览器总是等待页面中引用的所有外部脚本的加载完成,这是一个标准的浏览器规范吗?还是浏览器只是按顺序执行页面,等待每个页面完成后再移动到下一行,而不是异步执行?还是没有明确的顺序,网页设计师有责任确保所有外部脚本在使用前都准备好?

【问题讨论】:

  • 加载不是异步的。如果您将脚本放在标题中,它们将在到达正文之前加载并执行。
  • 同意,将您的脚本标签移动到正文的底部。除非您添加 async 或 defer 属性,否则该脚本将在您运行其后列出的任何内容之前进行评估。

标签: jquery internet-explorer google-chrome firefox


【解决方案1】:

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

也就是说,最好的做法是在加载整个文档后使用&lt;body onload="initialize();"&gt; 开始运行脚本。如果您在单独的 JS 文件中有一个自包含脚本,则可以确保它在加载之前不会运行。我最近一直在做 Coffeescript,脚本在单独的文件中,它们附加了一个处理程序到 &lt;body&gt;,所以它只在页面加载时运行:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2018-08-22
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    相关资源
    最近更新 更多