Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zepto和jQuery有条件地加载IE_Jquery_Internet Explorer_Zepto_Fallback - Fatal编程技术网

Zepto和jQuery有条件地加载IE

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 |

好的,我现在这样给我的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 | | 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(“”);
删除自托管;