我正在使用HTML5 Boilerplate 4.0构建一个新站点,并且遇到了jQuery本地回退代码的问题。有问题的代码在这里:
<!-- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script> -->
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.1.min.js"><\/script>')</script>
<script src="js/plugins.js"></script>
<script src="js/main.js"></script>
我现在正在本地开发,所以我已经注释掉了CDN系列。我的问题是jQuery确实加载了,但它在plugins.js和main.js之后加载,导致未定义的错误。
最接近于我发现的解释是this previous answer的#4点,这表明这是预期的,但是...上面很容易是jQuery最常用的本地回退代码,并且这是H5BP,经过严格审查。我一定错过了什么,是吗?
答案 0 :(得分:0)
我answered前一段时间也有类似问题。
您可以这样做:
function loadScript(pathToScript, callback) {
if (/jquery/.test(pathToScript) && window.jQuery) {
//jQuery has already been loaded so simply call the callback
callback.apply();
} else {
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.type = "text/javascript";
script.src = pathToScript + "?t=" + new Date().getTime(); //prevent caching
if (callback) {
script.onload = callback;
}
head.appendChild(script);
}
}
var scripts = ['js/vendor/jquery-1.8.1.min.js', 'js/plugins.js', 'js/main.js'];
(function (i) {
if (i < scripts.length) {
var self = arguments.callee;
loadResource(scripts[i], function () {
self(++i);
});
}
})(0);
答案 1 :(得分:0)
我也没有在StackOverflow上找到关于这个问题的准确答案,但是,这个页面似乎涵盖了这个主题:
总结一下 - 创建一个真正强大的故障转移解决方案并不简单。我们需要考虑浏览器不兼容性,文档状态和事件,依赖关系,延迟加载和超时!值得庆幸的是,像LABjs这样的工具可以让我们完全控制JavaScript文件的加载,从而帮助我们减轻痛苦。
注意:解决方案依赖于LABjs的使用
答案 2 :(得分:0)
您可以考虑使用yepnope与后备并行加载脚本。
从他们的网站:
yepnope.js有能力进行资源回退并且仍然存在 与第一个脚本并行下载相关脚本。
代码:
yepnope([{
load: 'http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js',
complete: function () {
if (!window.jQuery) {
yepnope('local/jquery.min.js');
}
}
}, {
load: 'jquery.plugin.js',
complete: function () {
jQuery(function () {
jQuery('div').plugin();
});
}
}]);
我希望这有帮助!