BahaiResearch.com BahaiResearch.com - 1 month ago 9
Javascript Question

jQuery 1.9 - How to migrate from $.browser.msie?

I am updating an old project that references $.browser.msie . Moving to jQuery 1.9 of course breaks this.

How can I rewrite this code to get the same boolean value without having to include jQuery Migrate?

The code is buried deep in an old javascript library we use that needs to determine if msie is running and then works on the knowledge. We'd rather not edit the javascript too much as it's brittle.

Answer

You could consider including the relevant code from jQuery 1.8 (https://github.com/jquery/jquery/blob/1.8.3/src/deprecated.js:

(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;
})();