Javascript判断浏览器及版本

在实际应用中,往往我们需要判断浏览器的类型从而对它们对应的操作。

通过翻阅书籍和研究js框架,提供一个小巧的函数判断。

function uaMatch() {
    var ua = window.navigator.userAgent.toLowerCase();

    var browser = {
        ie: false,
        firefox: false,
        safari: false,
        opera: false,
        chrome: false,
        
        gecko: false,
        webkit: false,
        
        version: null
    };
    
    if(window.opera) {
        browser.version = window.opera.version();
        browser.opera = true;
    } else {
        var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
            /(webkit)[ \/]([\w.]+)/.exec(ua) ||
            /ms(ie)\s([\w.]+)/.exec(ua) ||
            /(firefox)[ \/]([\w.]+)/.exec(ua) ||
            [];
        
        if(match[1]) browser[match[1]] = true;
        browser.version = match[2] || "0";
        
        if(browser.webkit) {
            browser.safari = true;
            var safariMatch = /version\/([\w.]+)/.exec(ua);
            browser.version = safariMatch[1] || "0";
        }
        if(browser.chrome) browser.webkit = true;
        if(browser.firefox) browser.gecko = true;
    }
    
    return browser;
};

var browser = uaMatch();

这个函数主要提供能力检测和用户代理相结合的方式来进行判断。

下面简单的解释下这个函数:

由于Opera9版本具有改变代理(userAgent)来伪装别的浏览器,所以只能通过Opera特有的属性(window.opera)来检测,如果存在,即为Opera浏览器。

其他浏览器则听过正则匹配userAgent来判断,如果匹配中Chrome,则内核webkit也为true。如果是webkit不为chrome,那就是safari。

国内的浏览器的浏览器的代理更加混乱,没在函数里面。具体搜狗可以通过匹配 /se 2.x/ 或者 /se 1.x/,傲游 /maxthon/,猎豹 /lbbrowser/ 等等正则来判断,可以自行加入,注意应放在最前,因为他们也能满足webkit。

由于各种浏览器厂商的不统一,用户代理检测的方式不能确保以后的兼容。只能说合适的时间选择适合的方法。

    发表评论

    *
    *