最简单/最轻的替换浏览器检测jQuery 1.9?

jch*_*dev 63 jquery browser-detection

我有几个客户昨天抱怨一些代码停止工作.显然,它归结为使用现已弃用的插件,该插件jQuery.browser在jQuery 1.9发布时于昨天停止工作.

我(快)看了一下1.9的变化文档和它看起来像他们想让我来代替一些非常沉重的图书馆只是那一个功能.

是否有推荐最轻的插件或代码片段来恢复该功能?

对于这些网站需要什么,它是非常基本的; 我只需要IE和FF与其他人的最基本的检测.

建议?

Fed*_*ede 39

我使用了Alexx Roche回答的以下代码,但我想检测MSIE,所以:

<script type="text/javascript">
   $(document).ready(function() {
      if (navigator.userAgent.match(/msie/i) ){
        alert('I am an old fashioned Internet Explorer');
      }
   });
</script>
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!

  • 如果你想要捕获更新的IE:s,请添加"trident"检查:if(navigator.userAgent.match(/ msie | trident/i)){;}` (10认同)

Bra*_*rad 22

创建 jQuery Migrate是为了在更新代码时允许向后兼容.

https://github.com/jquery/jquery-migrate

作为奖励,它会在您使用时记录已弃用的功能.你解决问题时我会尝试一下.此外,您应该为您的站点设置特定版本的jQuery.升级很好,但在将它们投入生产之前一定要测试这些升级.如果您使用的是CDN,则仍可以在文件名中指定特定版本.

现在,您不需要一个jQuery插件来满足您的要求.检查出navigator对象.

appCodeName: "Mozilla"
appName: "Netscape"
appVersion: "5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17"
cookieEnabled: true
doNotTrack: null
geolocation: Geolocation
language: "en-US"
mimeTypes: MimeTypeArray
onLine: true
platform: "MacIntel"
plugins: PluginArray
product: "Gecko"
productSub: "20030107"
userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17"
vendor: "Google Inc."
vendorSub: ""
Run Code Online (Sandbox Code Playgroud)


use*_*952 20

var browser = {
        chrome: false,
        mozilla: false,
        opera: false,
        msie: false,
        safari: false
    };
    var sUsrAg = navigator.userAgent;
    if(sUsrAg.indexOf("Chrome") > -1) {
        browser.chrome = true;
    } else if (sUsrAg.indexOf("Safari") > -1) {
        browser.safari = true;
    } else if (sUsrAg.indexOf("Opera") > -1) {
        browser.opera = true;
    } else if (sUsrAg.indexOf("Firefox") > -1) {
        browser.mozilla = true;
    } else if (sUsrAg.indexOf("MSIE") > -1) {
        browser.msie = true;
    }
    console.log(browser.msie);
Run Code Online (Sandbox Code Playgroud)


小智 11

将此代码放在您的站点中(如js文件,或者在jQuery代码之后......):

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;
Run Code Online (Sandbox Code Playgroud)

  • 我认为这对点和代表来说是好事,但是告诉人们复制/使用已弃用的功能并不能解决导致我们首先弃用`$ .browser`的问题.是的,副本/面食需要尊重许可条款. (4认同)
  • 如果引用[维护原点](https://github.com/jquery/jquery-migrate/blob/master/src/core.js),并注意到它是[MIT许可]( https://github.com/jquery/jquery-migrate/blob/master/LICENSE-MIT). (2认同)

Ale*_*che 10

当我遇到同样的问题时,我使用了以下代码:

<script type="text/javascript">
 $(document).ready(function() {
    //if (!$.browser.webkit && ! $.browser.mozilla) { //depricated
    if (!navigator.userAgent.match(/mozilla/i) && 
        ! navigator.userAgent.match(/webkit/i) ){
        alert('Let me tell you about Mozilla');
    }
 });
</script>
Run Code Online (Sandbox Code Playgroud)


use*_*654 6

在您放弃折旧方法之前,您可能无法更新.

你真的不应该在没有指定版本号的情况下从CDN中包含jquery,它在某种程度上违背了使用CDN(没有缓存)的目的.

这是支持$ .browser的最新版jQuery的链接:

http://code.jquery.com/jquery-1.8.3.min.js

只需用您的链接替换您的jquery.js src,您的代码将继续运行,直到您准备好继续前进并停止使用折旧功能.

注意:Fancybox2仍然使用$ .browser,这是自更新以来我见过的最常见的.

更新:Slickgrid仍在使用$.browser,截至2013年11月2日没有更新


Gab*_*ian 6

我将jQuery.browser中的逻辑抽象为插件jquery.browser.该插件在MIT许可下发布.

我还添加了对IE11,Opera Webkit和Android检测的支持.