web-dev-qa-db-fra.com

Jquery ne parvient pas à détecter IE 11

Je suis juste tombé sur un problème. Lorsque vous essayez de détecter IE 11 (la version bêta actuellement à l'antenne) à l'aide de Jquery, le résultat est 'firefox'. Le même code détecte IE 10. I besoin de savoir quel navigateur l'utilisateur utilise pour afficher différentes instructions.

Je teste dans Oracle VirtualBox si cela est important. Le système d'exploitation est Win 7.

Voici le code:

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
var browser = function() { 
if ($.browser.msie) return "ie";
var ua = navigator.userAgent.toLowerCase();
if ($.browser.mozilla/* && /firefox/.test(ua)*/) return "firefox"; 
if (/chrome/.test(ua)) return "chrome";
return /*"#"*/'unknown';
} ();

alert (browser); // This return firefox
alert ($.browser.version); // This returns 11.0 - the CORRECT version of IE
</script>

Comme vous pouvez le voir, Jquery peut trouver la version du navigateur, mais pas le nom du navigateur. Une idée comment le contourner?

26
Ehud Grand

La solution finale:

if (!!navigator.userAgent.match(/Trident\/7\./))
  return "ie";  

Nous ne pouvons qu'espérer que la version finale agira de même.

62
Ehud Grand

C'est pour des raisons de compatibilité. Le code client effectue souvent la détection du navigateur au lieu de la détection des fonctionnalités (ce qui est une mauvaise pratique). Donc, dans un effort pour s'assurer que les clients utilisent correctement toutes les capacités de IE 11, Microsoft a fait en sorte que IE 11 signale qu'il est compatible avec Mozilla).

Donc, au lieu de faire une détection par navigateur, faites une détection des fonctionnalités. Voir Détection de navigateur versus détection de fonctionnalité . Il existe d'excellentes bibliothèques pour cela, avec Modernizr étant probablement le plus connu (et Microsoft le propose dans le cadre des modèles ASP.NET dans Visual Studio).

Voir MSDN blog about IE 11 User Agent Strings .

7
mason

Le but de jQuery Migrate est de permettre l'exécution de l'ancien code mal écrit, et non d'encourager l'écriture de nouveau code mal écrit. Étant donné que cet ancien code mal écrit a été créé bien avant la sortie d'IE11, il ne connaît pas IE11 de toute façon et se comportera probablement mal malgré tout. Le plugin jQuery Migrate ne sera pas modifié pour détecter IE11. Si vous écrivez du nouveau code, n'utilisez pas la détection du navigateur. Utilisez plutôt la détection des fonctionnalités.

5
Dave Methvin

jQuery.browser est obsolète depuis longtemps et a été supprimé, vous devez utiliser $.support ou un meilleur outil comme Modernizr

2
David Fregoli