如何从Zepto,谷歌CDN jQuery,到本地jQuery?

sup*_*jos 7 jquery zepto

我已经看到了指示或询问如何从Zepto回退到jQuery(特别是对于IE)的页面,如此处在SOZepto.js官方页面上.
我还看过如何从Google托管的jQuery回退到本地站点jQuery的示例,如在Modernizr.load doc页面中.

我的问题是,我如何把这两件事放在一起?可能还没有使用Modernizr.load,只使用适当的<script>块?

这是我想出来的,但似乎IE从未找到谷歌托管版本.另外,我不确定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>
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?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>
Run Code Online (Sandbox Code Playgroud)

我无法使用谷歌CDN的无协议/无方案URL因为某些原因它在我的本地IE9上不起作用(它等了很多,然后总是回到本地).

我没有再别名ZeptojQuery:只是用$在JS代码.

我似乎没有遇到任何与jQuery加载乱序相关代码相关的问题.

Ash*_*ame 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>
Run Code Online (Sandbox Code Playgroud)

唯一一个不能很好处理的情况是,当用户使用IE之类的非Zepto兼容浏览器并且同时jQuery CDN关闭时,它将尝试再次加载jQuery CDN,然后最终回退到本地jQuery的副本.


但实际上,如果我要实现这一点,我只会有一个单独的回退到本地.就像尝试检查我们是否可以加载Zepto或jQuery一样,并且在下一步中,如果它们都没有加载,则加载本地库.最好有一些工作到位,而不是试图优化不会带来那么多收益的东西.明智地优化!上述技术#1很可能会有自己的跨浏览器兼容性问题.


我刚刚发现了这个问题,即使这种技术(由HTML5 Boilerplate&Modernizr使用和推荐)也不可靠.检查此问题 - document.write fallback导致jQuery无序加载

该问题的另一个解决方案是关于图书馆Yepnope.您可以查看它的工作原理 - /sf/answers/862632991/

最后,我会说这个答案,除非你正在构建一些完全是你的代码的东西,比如没有让用户在页面上添加更多内容的可能性,但不要为此烦恼,因为你会很快遇到这些技术的问题,因为其他脚本可能无序加载并导致问题,而如果你的所有代码,你可能会根据你的后备逻辑使一切负载和工作.