jQuery détecte IE6 en utilisant jQuery.support NOT jQuery.browser

Je n’ai trouvé aucun moyen précis de détecter IE6 en utilisant jquery.support au lieu de jquery.browser qui n’est plus pris en charge. Aussi j’ai besoin de rendre compte du mode Quirks, Ugh !!!

J’ai lu quelques articles sur Stack, mais ils font tous référence à jquery.browser et la documentation de jquery.support est un peu vague.

Toute aide sur ce serait formidable et merci d’avance.

Je pense que les auteurs de jQuery simple ne veulent plus que les développeurs vérifient quel navigateur exécute l’application / le site Web. Au lieu de cela, ils veulent que nous vérifions différentes fonctionnalités du navigateur et que nous décidions quoi faire en fonction de cela. Peu importe si c’est IE6, IE8, Firefox ou un nouveau navigateur . En tant que développeur d’applications, vous devez savoir comment la prise en charge par le navigateur de différentes fonctionnalités affecte la capacité de l’utilisateur à utiliser votre application et vous devez agir en conséquence.

$ .browser dépend de la détection du navigateur à l’aide des chaînes de l’agent d’utilisateur, ce qui peut ne pas être fiable, d’autant plus qu’il est très facile pour les utilisateurs d’usurper l’agent utilisateur sur leur navigateur. alors c’est leur faute si leur IE6 se présentant comme IE7 ne parvient pas à rendre la page correctement. 😉

Vous pouvez toujours utiliser $ .browser, malgré le fait qu’il soit obsolète, ou essayer de coder quelque chose par vous-même. Peut-être existe-t-il déjà un plugin jQuery? Je sais que la dernière fois que j’ai dû vérifier IE6, j’ai utilisé cette méthode …

Je n’ai trouvé aucun moyen précis de détecter IE6 à l’aide de jquery.support

Non, bien sûr que non – c’est tout le problème.

Le dogme est que détecter le support de fonctionnalités particulières, et coder en leur absence, est un meilleur moyen de maintenir la compatibilité entre navigateurs que d’essayer de garder une trace de tous les navigateurs existants et de ce qu’ils supportent.

Bien que vous puissiez travailler en arrière à partir de jquery.support pour deviner quel navigateur est en cours d’exécution, puis utiliser un code différent reposant sur une fonctionnalité complètement différente, ce serait tout à fait pervers. Vous adopteriez une approche déjà fragile consistant à supposer que le navigateur ‘X’ prend en charge la fonctionnalité ‘Y’ et à le rendre encore plus fragile en ajoutant une autre couche de fonctions de détection de fonctions non liées pouvant capturer le mauvais navigateur.

La réponse du dogme est donc: ne détectez jamais IE6, ni aucun autre navigateur particulier. Utilisez une solution de détection de fonctionnalités telle que jquery.support pour voir directement quelles fonctionnalités vous pouvez utiliser, mais ne supposez pas que la présence ou non de la fonctionnalité ‘Y’ signifie que vous pouvez ou non utiliser une fonctionnalité différente ‘Z’ associée avec le même navigateur ‘X’. Parce que cela ira toujours mal avec un navigateur ou une version nouvelle ou obscure que vous n’avez pas encore rencontrée.

Et la réponse du dogme est, en effet, généralement correcte. Cependant, en réalité, certains bogues de navigateur ne peuvent pas être détectés par le reniflage de fonctionnalités et nécessitent des solutions de contournement spécifiques. Et bien sûr, le navigateur qui est le plus souvent utilisé est IE6.

Il est difficile de savoir si vous vous trouvez dans l’une de ces situations, car votre question ne contient pas de détails, mais lorsque vous avez vraiment besoin d’un piratage horrible pour That One Browser, la meilleure solution est généralement les commentaires conditionnels , déposés en JavaScript ou en HTML.

Brad Koehler a l’idée . Utilisez des instructions conditionnelles IE comme celles ci-dessous

      

Ensuite, avec javascript et un peu de jQuery, vous pouvez le faire.

 $(document).ready(function () { if ($('html').is('.ie6')) { alert('You are running IE6!'); } else if($('html').is('.ie7')) { alert("You are running IE7!"); } else { // Browsers other than IE6 and 7. } }); 

L’éditeur est en train de cannibaliser ma première section de code, alors voici le lien qui y est associé – http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/

J’ai fait quelque chose d’un peu sale dans certains tests en ce moment, ne voulant pas utiliser le .browser obsolète, mais n’ayant pas lu et compris .support.

J’aime le plus, utilisez une feuille de style conditionnelle pour styler IE6. J’ai simplement ajouté un id = “IE6” à cela, puis détecté l’ID avec jQuery.

 jQuery.fn.exists = function(){return jQuery(this).length>0;} if ($('#IE6').exists()) { //do something } 

Cela semble fonctionner très bien. J’ai essayé de déclencher une alerte et de ne l’avoir que dans IE6, j’ai essayé de valider la page et elle passe au format HTML5. Je ne sais pas s’il existe un problème sous-jacent plus profond avec ce que j’ai fait, mais semble ok jusqu’à présent.

Vous pouvez faire quelque chose comme:

     var ie6to8 = jQuery.support.leadingWhitespace;
     var ie7to8 = jQuery.support.objectAll;
     if ((ie6to8 &&! ie7to8) || (! ie6to8 && ie7to8)) {// simulant un XOR
        // est ie6
     }

La documentation indique que jQuery.support.leadingWhitespace est false sur les IE 6, 7 et 8. Il est également dit que objectAll est false sur les IE 7 et 8. J’ai supposé que c’était vrai pour les autres navigateurs et j’ai effectué une opération XOR sur ces valeurs . De cette façon, cela ne sera vrai que lorsque la valeur de LeadingWhitespace sera différente de celle de objectAll, ce qui ne se produit que dans IE6.

Vous pouvez en voir plus ici: http://docs.jquery.com/Utilities/jQuery.support

MISE À JOUR: À compter de jQuery 1.3, le sniffing de navigateur n’est plus recommandé, mais peut toujours être effectué à l’ancienne (en utilisant $ .browser.msie et $ .browser.version). Recherchez-la ici: http://docs.jquery.com/Release:jQuery_1.3

Je sais que cela ne correspond pas à vos “exigences”, mais pour autant que je sache, il n’y a pas de moyen fiable qui utilise la détection de fonctionnalités seule.

C’est le seul moyen fiable de détecter IE6. C’est ce que j’utilise dans SimpleModal et cela semble bien fonctionner:

 var ie6 = $.browser.msie && parseInt($.browser.version) === 6 && typeof window['XMLHttpRequest'] !== "object";