document.write fallback导致jQuery无序加载

我正在使用HTML5 Boilerplate 4.0构建一个新站点,并且遇到了jQuery本地回退代码的问题。 有问题的代码在这里:

<!--  --> window.jQuery || document.write('')   

我现在正在本地开发,所以我已经注释掉了CDN系列。 我的问题是jQuery确实加载了,但它在plugins.js和main.js之后加载,导致未定义的错误。

最接近我可能发现的解释是前一个答案的#4点,这表明这是预期的,但是…上面很容易是jQuery最常用的本地回退代码,它是H5BP,这是经过严格审查。 我一定错过了什么,是吗?

我前段时间回答了类似的问题。

你可以这样做:

 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); 

我也没有在StackOverflow上找到关于这个问题的准确答案,但是,这个页面似乎涵盖了这个主题:

总结一下 – 创建一个真正强大的故障转移解决方案并不简单。 我们需要考虑浏览器不兼容性,文档状态和事件,依赖关系,延迟加载和超时! 值得庆幸的是,像LABjs这样的工具可以让我们完全控制JavaScript文件的加载,从而帮助我们减轻痛苦。

注意:解决方案依赖于LABjs的使用

您可以考虑使用yepnope与回退并行加载脚本。

从他们的网站:

yepnope.js具有执行资源回退的function,并且仍然可以与第一个脚本并行下载相关脚本。

和代码:

 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(); }); } }]); 

我希望这有帮助!