-->

jQuery.browser脚本或垫片的插件与1.9.1向后兼容性(jQuery.browser s

2019-07-22 06:10发布

我试图用流沙的jQuery插件,我得到这个错误使用jQuery 1.9.1。

“遗漏的类型错误:无法读取属性‘MSIE’的未定义”

我知道,MSIE是在jQuery.browser财产jQuery.browser的标志,因为1.3版本弃用,在jQuery的1.9.0移除

这就是为什么这是造成错误。 但有一个修复,使流沙将再次合作?

任何帮助或建议将是巨大的!

提前致谢!

Answer 1:

注意无畏的开发者(S)

在A(数)强制性的话jQuery.browserjQuery.support

jQuery.browser包含了用户代理,读取标志navigator.userAgent的 。 我们不推荐使用此属性 ; 请尽量使用特征检测(请参阅第jQuery.support )。 jQuery.browser可能在将来的jQuery的版本被移动到一个插件。

而不是使用$.browser在此基础上运行浏览器来检测当前用户代理和改变页面的介绍,它是使用特征检测一个很好的做法 为了使这个过程更简单,jQuery的执行许多这样的测试,并设置属性jQuery.support对象。

这个故事的寓意:更新你的项目,在删除依赖jQuery.browser和使用功能检测,在必要。 为了测试并找到您的项目过分依赖过时或删除方法或属性的区域,看到jQuery-migrate

另请参阅Modernizr.js和YepNope.js替代品jQuery的功能检测。


这个jQuery垫片文件替换$.browser ,礼貌的fancybox-Rails项目:

// jQuery 1.9 has removed the `$.browser` property, fancybox relies on
// it, so we patch it here if it's missing.
// This has been copied from jQuery migrate 1.1.1.
if ( !jQuery.browser ) {
  var uaMatch = function( ua ) {
    ua = ua.toLowerCase();

    var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
      /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
      /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
      /(msie) ([\w.]+)/.exec( ua ) ||
      ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
      [];

    return {
      browser: match[ 1 ] || "",
      version: match[ 2 ] || "0"
    };
  };

  matched = uaMatch( navigator.userAgent );
  browser = {};

  if ( matched.browser ) {
    browser[ matched.browser ] = true;
    browser.version = matched.version;
  }

  // Chrome is Webkit, but Webkit is also Safari.
  if ( browser.chrome ) {
    browser.webkit = true;
  } else if ( browser.webkit ) {
    browser.safari = true;
  }

  jQuery.browser = browser;
}

https://github.com/hecticjeff/fancybox-rails/blob/master/vendor/assets/javascripts/jquery.browser.js



Answer 2:

您正在使用quicksand包含插件code (ie $.browser)这是从删除jQuery版本开始1.9



文章来源: jQuery.browser script or shim for backwards-compatibility of plugins with 1.9.1