【发布时间】:2012-11-19 00:57:40
【问题描述】:
我看到过一些页面指导或询问如何从 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>
有没有更好的方法?助教
编辑
@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 的无协议/无方案 URL,因为某种原因它在我的本地 IE9 上不起作用(它等待了很多,然后总是回退到本地)。
我不再为Zepto 和jQuery 起别名:只是在JS 代码中使用了$。
我似乎没有遇到任何与 jQuery 加载乱序 w.r.t 相关的问题。依赖代码。
【问题讨论】:
-
我也试过
//ajax.googleapis.com/...,没有协议前缀 -
也尝试了this snippet,可能是用户@Sébastien Grosjean - ZenCocoon:它似乎工作正常,但后来我不想使用 Cloudflare CDN,也不想使用任何其他 Zepto CDN。跨度>
-
也试过
Modernizr.load,但不知何故,它似乎有点太多了。当然,我可能错了。