什么是jquery的快速、纯javascript替代品?浏览器(在jquery 1.9中删除)

What's a quick, pure javascript replacement for jquery.browser (removed in jquery 1.9)?

本文关键字:jquery 浏览器 删除 替代品 javascript 什么      更新时间:2023-09-26

是的,我知道特征检测更可取。

我在我的代码库中有一个案例,我们使用$.browser.msie$.browser.version来决定是否渲染一些CSS。编写代码的开发人员已经不在我们身边了,我不完全明白我应该在这里写什么样的特征检测。

作为一个快速修复,实现$.browser的最短方法是什么?Msie和$.browser.version?

我将复制jQuery 1.8.3中的代码。

// Limit scope pollution from any deprecated API
(function() {
var matched, browser;
// Use of jQuery.browser is frowned upon.
// More details: http://api.jquery.com/jQuery.browser
// jQuery.uaMatch maintained for back-compat
jQuery.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 = jQuery.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;
})();

使用条件注释代替JavaScript。

<!--[if lte IE 7]>
<link rel="stylesheet" href="ie.css" type="text/css">
<![endif]-->

快速修复,使脚本在正确重构之前不会中断(如果需要,为其他版本添加条件注释):

<!--[if IE 7]>
<script> if(typeof $!== typeof undefined){ $.browser = { msie : true, version : 7 }} </script>
<![endif]-->
<!--[if IE 8]>
<script> if(typeof $!== typeof undefined){ $.browser = { msie : true, version : 8 }} </script>
<![endif]-->

JQuery发布了一个Migrate插件来恢复$。浏览器时使用1.9。只要确保在生产服务器上使用Migrate的生产版本即可。开发版本将生成一堆控制台消息,告诉您在1.9 sans Migrate中代码将在哪里中断。

使用JQuery迁移恢复$。然而,浏览器可能不是最好的长期解决方案。顾名思义,它是一个过渡工具,我不知道它的浏览器检测功能是否会被积极维护。另一种选择是Modernizr。

我个人将做的是暂时将我的生产站点保留在JQ 1.8上,并在我的开发机器上使用Migrate的开发版本进行测试,以便在决定升级策略之前更好地了解1.9会破坏什么(他们做的不仅仅是删除$.browser)。