jQuery.browser 脚本或垫片,用于向后兼容 1.9.1 的插件

bry*_*wis 3 jquery internet-explorer quicksand

我正在尝试使用流沙和 jquery 插件,但在使用 jquery 1.9.1 时出现此错误。

“未捕获的类型错误:无法读取未定义的属性 'msie'”

我知道 msie 是 jQuery.browser 属性上的标志 jQuery.browser 自 1.3 版以来已弃用,并在 jQuery 1.9.0 中删除

这就是为什么这会导致错误。但是有没有办法让流沙再次起作用?

任何帮助或建议都会很棒!

提前致谢!

Jar*_*ish 5

Intrepid 开发人员的注意事项

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

jQuery.browser包含用户代理的标志,从navigator.userAgent读取。我们建议不要使用此属性;请尝试改用特征检测(请参阅 参考资料jQuery.support)。jQuery.browser可能会在 jQuery 的未来版本中移动到插件中。

与其使用$.browser检测当前的用户代理并根据正在运行的浏览器更改页面呈现,不如使用功能检测。为了简化这个过程,jQuery 执行了许多这样的测试并设置jQuery.support对象的属性。

故事寓意:更新您的项目,消除对 的依赖jQuery.browser,并在必要时使用特征检测。要测试和查找您的项目过度依赖已弃用或删除的方法或属性的区域,请参阅jQuery-migrate

另请参阅Modernizr.jsYepNope.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;
}
Run Code Online (Sandbox Code Playgroud)

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