5

假设您在 HTML 文件中有以下内容:

<script type="text/javascript" src="whatever.js"></script>
<script type="text/javascript" src="whatever.js"></script>

whatever.js被第二次加载,还是浏览器会看到它已经加载并跳过重新加载它?

注意:这对我来说是因为我正在使用包含其他代码片段的 HTML 模板,其中一些可能会加载相同的脚本,从而导致可能的重复。我想确保我的页面不会被重复的脚本加载所拖累。

4

2 回答 2

3

是的,它会重新加载它。您可以做的是检查当前脚本元素是否已经出现在您跟踪的“加载”列表中:http: //jsfiddle.net/kvPcU/1/

在您获取文件之前,位于页面顶部的某处:

var loaded = {};

然后:

var elements = document.getElementsByTagName('script');
var currentElement = elements[elements.length - 1];  // element of currently executing script
if(!loaded[currentElement.src]) {
  loaded[currentElement.src] = true;
  // run code
}
于 2012-09-03T17:53:18.783 回答
3

这取决于“跳过”加载的含义。

如果您想避免两次访问服务器,那么在服务器上设置适当的缓存控制将避免文件被下载两次。

如果你想避免文件被执行两次,那么答案是否定的:浏览器不会跳过第二次执行文件。您可以通过将文件包装在一个巨大的“if”语句中并检查全局变量或 HTML 元素来测试文件之前是否已加载来解决此问题。

于 2012-09-03T17:57:28.000 回答