Comment faire la détection de navigateur avec jQuery 1.3 avec $.navigateur.msie est dépréciée?

Comment faire la détection de navigateur maintenant que jQuery 1.3 A déprécié (et je suppose supprimé dans une version future) $.navigateur.msie et similaire?

j'ai beaucoup utilisé cela pour déterminer dans quel navigateur nous sommes pour les corrections CSS pour à peu près tous les navigateurs, tels que:

$.browser.opera
$.browser.safari
$.browser.mozilla

... je pense que c'est tout:)

Les lieux où je l'utilise, je ne suis pas sûr de ce problème de navigateur est à l'origine du problème, parce que souvent, j'essaie juste de corriger une différence de 1 px dans un navigateur.

Edit: avec la nouvelle fonctionnalité jQuery, il n'y a aucun moyen de déterminer si vous êtes dans IE6 ou IE7. Comment devrait-on déterminer cela maintenant?

24
demandé sur alex 2009-01-18 12:29:10

16 réponses

je faisais face à quelque chose de similaire, il n'y a pas de $.soutien.png (p.ej.), donc j'ai besoin d'utiliser le $.navigateur.version encore, peut-être que nous pouvons juste continuer à demander plus de $.soutien.Propriétés XXXX, autant que nécessaire.

9
répondu Ricardo Vega 2009-01-19 07:52:43

Oui, la détection du navigateur a été dépréciée, mais les propriétés dépréciées ne seront probablement pas retirées de jQuery de sitôt. Et quand ils seront supprimés, si vous avez absolument besoin de faire la détection du navigateur, vous pouvez ajouter la même fonctionnalité facilement avec un petit plugin simple.

Donc, ma réponse est de ne rien faire à ce sujet, pour l'instant :)

edit: je vais même vous fournir un plugin à utiliser à l'avenir (non testé, copié-collé à partir de source jquery):

(function($) {
    var userAgent = navigator.userAgent.toLowerCase();

    $.browser = {
        version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
        safari: /webkit/.test( userAgent ),
        opera: /opera/.test( userAgent ),
        msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
        mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
    };

})(jQuery);
33
répondu kkyy 2009-02-24 09:24:17

.navigateur a été déprécié en faveur de .soutien. Plus d'informations ici: jquery.prise en charge cela signifie essentiellement qu'au lieu d'utiliser le navigateur sniffing, jquery prend désormais en charge la détection des fonctionnalités et permet un contrôle beaucoup plus fin sur ce que le navigateur peut faire.

de la description:

ajouté en jQuery 1.3 une collection de des propriétés qui représentent la présence de différentes fonctionnalités de navigateur ou bugs.

jQuery est livré avec un certain nombre de propriétés incluses, vous devriez vous sentir - vous libre pour ajouter vos propres. Beaucoup de ces les propriétés sont assez bas niveau donc il est douteux qu'ils vous être utiles en général, le développement au jour le jour, mais principalement utilisé par plugin et core promoteurs.

les valeurs de tous les supports les propriétés sont déterminées en utilisant détection des caractéristiques (et ne pas utiliser formulaire de navigateur sniffing)

8
répondu Ray Booysen 2009-01-18 09:32:59
Le support de la fonctionnalité

est une bonne idée, mais il ne fonctionnera que s'il supporte tous les"bugs" possibles. Comme le premier commentateur, il n'y a pas de soutien financier.png, ou un soutien$.pas à pas, ou $soutien.peekaboo, ou a, oh, la liste continue. Le problème avec cela est qu'un code pour rendre un navigateur conforme finira inévitablement par être exécuté par un navigateur qui n'en a pas besoin.

5
répondu 2009-02-04 17:19:18

détection du Navigateur n'est pas obsolète en jQuery. Doc page pour jQuery.navigateur , qui stipule:

nous vous recommandons de ne pas utiliser cette propriété, veuillez essayer d'utiliser la fonction de détection à la place (voir jQuery.soutien.)

dépréciation " s'entend de l'enlèvement prévu."Ce conseil sur le reniflement des capacités plutôt que des agents utilisateurs est juste un bon conseil général, et non spécifique à jQuery. Tout ce qu'ils disent c'est qu'ils rendent plus facile de faire la bonne chose.

il va toujours y avoir un besoin d'agent utilisateur reniflant cependant. À moins que jQuery.support ne soit mis à jour quotidiennement par une armée de développeurs, il n'y a aucun moyen qu'il puisse suivre chaque bug et chaque fonctionnalité dans chaque version point mineure de chaque navigateur.

je pense que la confusion à ce sujet provient du fait que, à l'interne, jQuery ne fait plus navigateur renifler. Mais L'API utilitaire jQuery.navigateur continuera à exister.

5
répondu jpsimons 2009-11-19 07:07:45
function browserLessThanIE7(){
   return (/MSIE ((5\.5)|6)/.test(navigator.userAgent) && navigator.platform == "Win32");
}

Pourrait aussi bien fonctionner... Celui-ci vérifie les versions 5, 5.5 et 6.

@Nate: variation (5\.5) / 6 en 7 et il vérifie la version 7.

4
répondu Darryl Hein 2009-10-09 16:33:41

je dis "reverse engineer" de jQuery 1.2.

voir cette section du code:

jQuery.browser = {
    version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
    safari: /webkit/.test( userAgent ),
   opera: /opera/.test( userAgent ),
  msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
  mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};

respecte les licences GPL et MIT et apprend du code. Ne pas copier et coller.

ou spécifiquement pour l'odeur de IE6. Vous pourriez faire:

function IsThisBrowserIE6() {
    return ((window.XMLHttpRequest == undefined) && (ActiveXObject != undefined))
}
2
répondu BuddyJoe 2009-03-12 21:33:15

la détection de fonctionnalité sonne très bien et épatante, mais quand j'écris un code qui ne fonctionne pas dans un certain navigateur, la méthode la plus rapide est la détection de navigateur.

centrage horizontal d'un élément à l'aide de marges automatiques fonctionne pour tous les navigateurs sauf IE. Pour quelle fonctionnalité dois-je tester? Je n'ai aucune idée. Mais je sais dans quel navigateur ça ne marche pas.

je peux comprendre pourquoi la détection de caractéristiques serait utile dans certaines situations, par exemple: si un navigateur est en bizarreries / mode strict. Le meilleur compromis serait d'utiliser les deux méthodes.

à la lumière de ce" nous recommandons de ne pas utiliser cette propriété, s'il vous plaît essayer d'utiliser la détection de caractéristique à la place " devrait être supprimé du jQuery.page de documentation du navigateur. Il est trompeur.

2
répondu john 2010-03-04 02:01:24

pourquoi pas jquery.le navigateur doit être réécrit pour utiliser jquery.support interne pour déterminer le navigateur basé sur les fonctionnalités (peut-être complété avec les méthodes actuelles de jquery.navigateur lorsque nécessaire), pour fournir un moyen pratique de sélectionner pour la famille de navigateur et la version, tout en étant peut-être plus fiable que jquery d'aujourd'hui.navigateur?

2
répondu Matt Vaughan 2010-04-21 00:09:16

jQuery 1.3 a remplacé le test du navigateur .

franchement, je suis surpris de voir combien de fois les développeurs Web sont préoccupés par le navigateur dans lequel leur site est lancé. En plus de 10 ans de développement Web, Je peux penser à une poignée de cas où je me suis soucié encore moins pris la peine de faire quelque chose de différent. La raison la plus commune a été que les tailles de police nommées diffèrent considérablement entre Firefox et IE ( font-size: large est beaucoup plus grand en IE que FF) donc I ont utilisé un IEfix.fichier css pour corriger cela.

peut-être devriez-vous regarder Qu'est-ce qui est mieux: les hacks CSS ou la détection par navigateur? pour une discussion plus approfondie sur le sujet.

Le long et à court de celui-ci, vous devez prendre soin, si une fonction est prise en charge ou pas, pas le navigateur, il est.

il est difficile de dire quoi que ce soit de plus sans savoir pourquoi vous vous souciez si C'est IE parce que vous trouverez probablement il ya beaucoup mieux la solution pour faire ce que vous faites.

1
répondu cletus 2017-05-23 12:30:42

essayez le script GeckoFix à http://code.labor8.eu/geckoFix , il détecte le Firefox inférieur à 3.0 de sorte que vous pouvez le personnaliser comment vous voulez (i.e. en ajoutant plus de règles à elle comme la détection Firefox 2, Firefox 3, Opera et Safari). Je pense qu'il pourrait être ce que vous cherchez. Pour vérifier l'agent utilisateur il suffit de taper votre barre d'adresse javascript: alert (navigator.userAgent) et trouver quelques caractères spécifiques dont vous aurez besoin pour taper script.

1
répondu 2009-02-24 09:14:32

j'ai un morceau de Javascript qui fonctionne très bien dans les navigateurs Mozilla et Webkit, ainsi que IE8. Cependant, en 6 et 7, Il se brise. Cela n'a rien à voir avec le CSS, ni Javascript pauvre, mais les supports merdiques D'IE<8.

je peux voir d'où les gens viennent au sujet de la vérification de "caractéristiques" par opposition à l'reniflement de navigateur, cependant, les caractéristiques que l'reniflement est disponible pour ne sont pas pertinents pour le code de rupture, alors quelle est la différence entre le navigateur sniffing et fonction sniffing jusqu'à ce que toutes les fonctionnalités sont disponibles dans le $.un objet de soutien?

1
répondu 2009-05-14 07:25:47

je tiens à souligner que navigator.userAgent n'est pas très digne de confiance, dans le sens où il est facilement modifiable et pourrait ne pas représenter le navigateur réel regardant la page. Cela pourrait être l'une des raisons pour lesquelles $.browser a été déprécié en premier lieu.

mais pour le bien de la question, supposons que la détection de navigateur est absolument nécessaire .

je suis tombé sur cet extrait très cool de James Padolsey , qui différencie en fait les explorateurs sur Internet en utilisant des commentaires conditionnels.

j'ai compilé un petit morceau de code avec l'extrait ci-dessus et un peu de code de yepnope.js :

(function(window, doc) {
    window.detector = window.detector || (function() {
        var undef,
            docElement = doc.documentElement,       
            v = 3,
            div = document.createElement('div'),
            all = div.getElementsByTagName('i'),
            isGecko = ( 'MozAppearance' in docElement.style ),
            isGeckoLTE18 = isGecko && !! doc.createRange().compareNode,
            isOpera = !! ( window.opera && toString.call( window.opera ) == '[object Opera]' ),
            isWebkit = ( 'webkitAppearance' in docElement.style ),
            isNewerWebkit = isWebkit && 'async' in doc.createElement('script');

            while (
                div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
                all[0]
            );

            return {
                isGecko: isGecko,
                isGeckoLTE18: isGeckoLTE18,
                isGeckoGT18: isGecko && ! isGeckoLTE18,
                isOpera: isOpera,
                isWebkit: isWebkit,
                isNewerWebkit: isWebkit && 'async' in doc.createElement('script'),
                isIE: ( v > 4 ),
                ieVersion: ( v > 4 ? v : undef )
            };
    }());
}(window, document));

cela différencie les navigateurs par leurs capacités.

seuls les problèmes sont, je n'ai actuellement aucun moyen de dire entre Safari et Chrome (les deux navigateurs Webkit), et entre les versions des navigateurs Gecko, Webkit et Opera eux-mêmes.

je sais que ce n'est pas parfait, mais c'est une légère amélioration par rapport à navigator.userAgent .

1
répondu GeReV 2011-08-17 03:10:54

ce n'est peut-être pas le moyen le plus propre pour IE 6 mais il fonctionne certainement et est facile à comprendre:

$(document).ready(function() {
    ie6catch = $.browser.msie + $.browser.version;
    if (ie6catch.indexOf("true6") == -1) {
        alert("This is not Internet Explorer 6");
    }
});
1
répondu Tristan Botly 2011-08-26 05:31:09

ce serait une bonne idée d'ajouter les navigateurs comme classe à la balise body pour css. Je ne sais pas si cela fonctionne parce que je n'exécute pas windows et j'ai un powerPC mais il devrait mettre une classe de .ie6 à tous les explorateurs internet 6-9, pas très utile. Utilisez mooModernizr pour tout le reste.

if (Browser.Engine.trident) {

    var IEbrowser = $('body');

    IEbrowser.addClass('ie');

}​
0
répondu Montana Flynn 2010-03-30 06:16:14
var browser = {
        chrome: false,
        mozilla: false,
        opera: false,
        msie: false,
        safari: false
    };
    var sBrowser, 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);
0
répondu user989952 2013-05-07 01:48:36