0

好的,所以我现在这样称呼我的 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>

当然,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>

Zepto 建议这样做 -

<script>
  document.write('<script src=' + ('__proto__' in {} ? 'zepto' : 'jquery') + '.js><\/script>')
</script>

我如何将两者联系在一起?

4

2 回答 2

0

改进赫尔曼的回答:

<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>

这清理了全局变量。

但是,这种方法有一个问题:CDNJS 的 Zepto 不包含Foundation 使用的其他模块(参见:https ://github.com/madrobby/zepto#readme )。这将破坏工具提示 - 并且很可能会破坏其他 JS 插件。因此,请使用 Foundation 自己的 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>
于 2013-09-11T00:24:36.657 回答
0

可能最容易使用像 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>

不幸的是,我不得不创建一个全局变量并分离出脚本,以便第一个 document.write() 被阻塞。也可以只使用document.createElement('script')然后在上执行回退语句script.onerror

于 2013-07-13T22:41:33.767 回答