我已经看过指示或询问如何从Zepto回退到jQuery(特别是对于IE)的页面,here on SO和Zepto.js official page上的页面。
我还看到了如何从Google托管的jQuery回退到本地站点jQuery的示例,如Modernizr.load doc page中所示。
我的问题是,如何将这两件事放在一起?可能还没有使用Modernizr.load,只使用正确的<script>
块?
这是我提出的,但似乎IE从未找到Google托管版本。另外,我不确定Zepto = jQuery
作业是否正常。
<script>
document.write('<script src=' +
('__proto__' in {} ?
'js/vendor/zepto.min' :
'https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min') +
'.js><\/script>');
</script>
<script>
if (window.jQuery) {
window.Zepto = window.jQuery; /* let jQuery alias Zepto */
}
else
{ /* here jQuery could be rightly undefined because Zepto is loaded,
so this could be wrong. */
document.write('<script src=' +
'js/vendor/jquery-1.8.0.min' +
'.js><\/script>');
}
</script>
<script>
if (window.jQuery) {
window.Zepto = window.jQuery; /* let jQuery alias Zepto */
}
else
{
/* same problem as before */
console.error('Zepto nor jQuery available!');
}
</script>
有更好的方法吗? TA
修改
在@Ashfame回答之后,这就是我用过的:
<!-- Load local Zepto.js or (as a fallback) jQuery from Google CDN or (as a fallback) local jQuery -->
<script>
document.write('<script src="' + ('__proto__' in {} ?
'js/vendor/zepto' :
'http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery') +
'.min.js"><\/script>')
</script>
<script>
window.Zepto || window.jQuery || document.write('<script src="js/vendor/jquery-1.8.0.min.js"><\/script>');
</script>
我无法使用Google CDN的无协议/无方案网址,因为它在我的本地IE9上无效(它等了很多,然后总是回到本地)。
我没有Zepto
与jQuery
别名:在JS代码中使用了$
。
我似乎没有遇到任何与jQuery加载无序w.r.t相关的问题。依赖代码。
答案 0 :(得分:6)
为了尝试这项技术,我先尝试一下:
我在jQuery CDN关闭时HTML5 Boilerplate如何加载本地回退的过程中写得很快。
这可能不起作用,但我认为现在不应该有任何理由。想给它一个旋转吗?
<script>document.write('<script src="' + ('__proto__' in {} ? 'cdn/zepto.min' : 'cdn/jquery.min') + '.js">\x3Cscript>');</script>
<script>window.Zepto || window.jQuery || document.write('<script src="cdn/jquery.min.js">\x3C/script>')</script>
<script>window.Zepto || window.jQuery || document.write('<script src="local/jquery.min.js">\x3C/script>')</script>
唯一不能很好处理的情况是用户使用的是非兼容Zepto的浏览器,例如IE&amp;同时jQuery CDN关闭,然后它会尝试再次加载jQuery CDN,然后最终回退到jQuery的本地副本。
但实际上,如果我要实现这个,我只会有一个单一的后备到本地。就像尝试检查我们是否可以加载Zepto或jQuery一样,并且在下一步中,如果它们都没有加载,则加载本地库。最好有一些工作到位,而不是试图优化不会带来那么多收益的东西。明智地优化!上述技术#1很可能会有自己的跨浏览器兼容性问题。
我刚刚发现了这个问题,即使这种技术(由HTML5 Boilerplate&amp; Modernizr使用和推荐)也不可靠。请查看此问题 - document.write fallback causing jQuery to load out of order
该问题的另一个解决方案是谈论图书馆Yepnope。您可以查看其工作原理 - https://stackoverflow.com/a/12323328/551713
最后,我会以这样的方式结束这个答案:除非你正在构建一些完全属于你的代码的东西,比如不会因为用户在页面上添加更多东西的可能性而疯狂,不要为此烦恼那么多,因为你会很快遇到这些技术的问题,因为其他脚本可能无序加载并导致问题,而如果你的所有代码,你可能会使一切负载和按照你的后备逻辑工作。