Zepto和jQuery有条件地加载IE
好的,我现在这样给我的Zepto打电话-Zepto和jQuery有条件地加载IE,jquery,internet-explorer,zepto,fallback,Jquery,Internet Explorer,Zepto,Fallback,好的,我现在这样给我的Zepto打电话- <script src="//cdnjs.cloudflare.com/ajax/libs/zepto/1.0/zepto.min.js"></script> <script>window.jQuery || document.write('<script src="js/vendor/zepto.js"><\/script>')</script> window.jQuery |
<script src="//cdnjs.cloudflare.com/ajax/libs/zepto/1.0/zepto.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/zepto.js"><\/script>')</script>
window.jQuery | | document.write(“”)
当然,Zepto不是为IE而构建的,所以我需要回退到jQuery来使用这种浏览器
我猜我的IE后备方案会和这个类似-
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/***/1.9.2.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery.js"><\/script>')</script>
window.jQuery | | document.write(“”)
Zepto建议这样做-
<script>
document.write('<script src=' + ('__proto__' in {} ? 'zepto' : 'jquery') + '.js><\/script>')
</script>
文件。写入(“”)
如何将两者联系在一起?使用类似于yepnope.js的脚本加载程序可能是最简单的。我试了一下:
<script>
var fallback;
if ('__proto__' in {}) {
document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/zepto/1.0/zepto.min.js"><\/script>');
fallback = 'zepto';
} else {
document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"><\/script>');
fallback = 'jquery';
}
</script>
<script>
window.$ || document.write('<script src="js/vendor/' + fallback + '.js"><\/script>');
</script>
var回退;
if({}中的''''''''{
文件。写(“”);
后退='zepto';
}否则{
文件。写(“”);
回退='jquery';
}
window.$| | document.write(“”);
不幸的是,我必须创建一个全局变量并分离脚本,以便第一个document.write()被阻塞。也可以只使用
document.createElement('script')
,然后在script.onerror上执行回退语句改进Herman的答案:
<script>
if ( '__proto__' in {} ) {
document.write('<script src="//cdnjs.cloudflare.com/ajax/libs/zepto/1.0/zepto.min.js"><\/script>');
selfHosted = 'zepto';
} else {
document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"><\/script>');
selfHosted = 'jquery';
}
</script>
<script>
window.$ || document.write('<script src="js/vendor/' + selfHosted + '.js"><\/script>');
delete selfHosted;
</script>
if({}中的“uuu proto_uuuu”){
文件。写(“”);
自托管='zepto';
}否则{
文件。写(“”);
selfHosted='jquery';
}
window.$| | document.write(“”);
删除自托管;
这将清除全局变量
不过,这种方法有一个缺点:CDNJS的Zepto不包括基金会使用的额外模块(请参阅:)。这将破坏工具提示,很可能还会破坏其他JS插件。
因此,请使用基金会自己的Zepto,该Zepto配备了所有必要的模块:
<script>
if( '__proto__' in {} ) {
selfHosted = 'zepto';
} else {
document.write('<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"><\/script>');
selfHosted = 'jquery';
}
</script>
<script>
window.$ || document.write('<script src="js/vendor/' + selfHosted + '.js"><\/script>');
delete selfHosted;
</script>
如果{}{
自托管='zepto';
}否则{
文件。写(“”);
selfHosted='jquery';
}
window.$| | document.write(“”);
删除自托管;