77 votes

JQuery $.navigateur Obsolète?

Quelqu'un peut me dire si j'ai raison de croire que jQuery $.navigateur est/a été abandonné?

Mon implémentations existantes de continuer à travailler? Si non, est-il facile à mettre en œuvre d'autres.

95voto

EminezArtus Points 716

Une alternative consiste à copier $.navigateur à partir d'une version de jQuery qui n'a pas fait disparaître. Vous pouvez ensuite incorporés dans la version 1.9+

Juste ajouter ceci à la fin de votre fichier jQuery!

// 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;

    jQuery.sub = function() {
        function jQuerySub( selector, context ) {
            return new jQuerySub.fn.init( selector, context );
        }
        jQuery.extend( true, jQuerySub, this );
        jQuerySub.superclass = this;
        jQuerySub.fn = jQuerySub.prototype = this();
        jQuerySub.fn.constructor = jQuerySub;
        jQuerySub.sub = this.sub;
        jQuerySub.fn.init = function init( selector, context ) {
            if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
                context = jQuerySub( context );
            }

            return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
        };
        jQuerySub.fn.init.prototype = jQuerySub.fn;
        var rootjQuerySub = jQuerySub(document);
        return jQuerySub;
    };

})();

Si votre demandant pourquoi diable vous souhaitez utiliser ce quand il a été enlevé, bien.. bien ses parce que la plupart des plugins utiliser cette fonctionnalité et nous voulons nous assurer que les plugins de mise à jour du code jQuery trouver une solution.

68voto

lonesomeday Points 95456

À partir de la documentation:

L' $.navigateur propriété est supprimée de la version de jQuery 1.3, et ses fonctionnalités peuvent être déplacés à une équipe pris en charge plugin dans une future version de jQuery.

Donc, oui, c'est déconseillé, mais votre implémentations existantes continueront à fonctionner. Si la fonctionnalité est supprimé, il sera susceptible d'être facilement accessible à l'aide d'un plugin.

S'il y a une alternative... La réponse est "oui, probablement". Il est beaucoup, beaucoup mieux à faire fonction de détection à l'aide de $.support plutôt que sur la détection du navigateur: détecter les fonctionnalité dont vous avez besoin, pas le navigateur qui le fournit. La plupart des caractéristiques importantes qui varient d'un navigateur à l'autre sont détectés.


Mise à jour le 16 février 2013: En jQuery 1.9, cette fonctionnalité a été supprimée (docs). Il est de loin préférable de ne pas l'utiliser. Si vous avez vraiment, vraiment doit utiliser ses fonctionnalités, vous pouvez le restaurer avec le jQuery Migrate plugin.

6voto

Ismael Miguel Points 231

pour détecter ie utiliser ceci:

if(/*@cc_on!@*/false)
{
    //You are using ie >=4
}
else
{
    //You are using other browser
}

Pour détecter tous les:

if(/*@cc_on!@*/false)
{
    //You are using ie >=4
}
else if(window.chrome)
{
    //You are using chrome or chromium
}
else if(window.opera)
{
    //You are using opera >=9.2
}
else if('MozBoxSizing' in document.body.style)
{
    //You are using firefox or firefox based >=3.2?
}
else if({}.toString.call(window.HTMLElement).indexOf('Constructor')+1)
{
    //You are using safari >= 3.1
}
else
{
    //Unknown
}

3voto

Gabriel Santos Points 2962

"L' $.navigateur propriété est supprimée de la version de jQuery 1.3, et ses fonctionnalités peuvent être déplacés à une équipe pris en charge plugin dans une future version de jQuery." À partir de http://api.jquery.com/jQuery.browser/

3voto

SpYk3HH Points 10533

lonesomeday's réponse est absolument correct, j'ai juste pensé que je voudrais ajouter à cette friandise. J'avais fait une méthode tout à l'heure pour arriver navigateur en Vanilla JS et, éventuellement, incurvé pour remplacer jQuery.browser dans les dernières versions de jQuery. Il n'interfère pas avec n'importe quelle partie de la nouvelle lib jQuery, mais fournit la même fonctionnalité de la traditionnelle jQuery.browser de l'objet, ainsi que quelques autres petites fonctionnalités.

jsFiddle

/** jQuery.browser
 *  @author J.D. McKinstry (2014)
 *  @description    Made to replicate older jQuery.browser command in jQuery versions 1.9+
 *  @see http://jsfiddle.net/SpYk3/7eSmd/
 *
 *  @extends    jQuery
 *  @namespace  jQuery.browser
 *  @example    jQuery.browser.version
 *  @example    jQuery.browser.browser == 'browserNameInLowerCase'
 *  @example    jQuery.browser['browserNameInLowerCase']
 *              @example    jQuery.browser.chrome   @returns    BOOLEAN
 *              @example    jQuery.browser.safari   @returns    BOOLEAN
 *              @example    jQuery.browser.opera    @returns    BOOLEAN
 *              @example    jQuery.browser.msie     @returns    BOOLEAN
 *              @example    jQuery.browser.mozilla  @returns    BOOLEAN
 *              @example    jQuery.browser.webkit == true if [chrome || safari || mozilla]
 */
;;(function(a){!a.browser&&1.9<=parseFloat(a.fn.jquery)&&(a.extend({browser:{}}),a.browser.init=function(){var b={};try{navigator.vendor?/Chrome/.test(navigator.userAgent)?(b.browser="Chrome",b.version=parseFloat(navigator.userAgent.split("Chrome/")[1].split("Safari")[0])):/Safari/.test(navigator.userAgent)?(b.browser="Safari",b.version=parseFloat(navigator.userAgent.split("Version/")[1].split("Safari")[0])):/Opera/.test(navigator.userAgent)&&(b.Opera="Safari",b.version=parseFloat(navigator.userAgent.split("Version/")[1])):/Firefox/.test(navigator.userAgent)?(b.browser="mozilla",b.version=parseFloat(navigator.userAgent.split("Firefox/")[1])):(b.browser="MSIE",/MSIE/.test(navigator.userAgent)?b.version=parseFloat(navigator.userAgent.split("MSIE")[1]):b.version="edge")}catch(c){b=c}a.browser[b.browser.toLowerCase()]=b.browser.toLowerCase();a.browser.browser=b.browser;a.browser.version=b.version;a.browser.chrome="chrome"==a.browser.browser.toLowerCase();a.browser.safari="safari"==a.browser.browser.toLowerCase();a.browser.opera="opera"==a.browser.browser.toLowerCase();a.browser.msie="msie"==a.browser.browser.toLowerCase();a.browser.mozilla="mozilla"==a.browser.browser.toLowerCase();a.browser.webkit=a.browser.chrome||a.browser.safari||a.browser.mozilla},a.browser.init())})(jQuery);

/*  Just cut & paste above code for easy use!   */

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X