Je veux être capable de détecter IE9 ou moins en utilisant jQuery (ou s'il y a une meilleure méthode?). Si la version du navigateur est IE9 ou moins, je souhaite alors charger un modal avec l'option de mise à niveau vers Chrome, FF, etc.
J'ai lu que $ .Browser ne fonctionnait plus, alors je me demandais simplement quel était le meilleur moyen de réaliser ce que je voulais:
$(document).ready(function(){
/* Get browser */
$.browser.chrome = /chrome/.test(navigator.userAgent.toLowerCase());
/* Detect Chrome */
if($.browser.chrome){
/* Do something for Chrome at this point */
alert("You are using Chrome!");
/* Finally, if it is Chrome then jQuery thinks it's
Safari so we have to tell it isn't */
$.browser.safari = false;
}
/* Detect Safari */
if($.browser.safari){
/* Do something for Safari */
alert("You are using Safari!");
}
});
N'utilisez pas jQuery pour détecter les versions de IE. Utilisez plutôt des commentaires conditionnels.
Pourquoi? Réfléchissez bien à la raison pour laquelle vous souhaitez cibler ces anciennes versions. C'est probablement parce qu'ils ne prennent pas en charge certaines fonctionnalités JS/CSS dont vous avez besoin. Donc, voulez-vous vraiment conserver votre propre code JS qui fonctionnera dans ces versions antérieures? Si vous choisissez cette voie, vous devez commencer à vous demander si le code de détection que vous écrivez fonctionnera dans IE6 ou 5 ou 4 ... pénible!
Au lieu d'essayer ce qui suit:
L'exemple ci-dessous utilise une simple révélation utilisant CSS, mais vous pouvez facilement le remplacer par JS si vous préférez. Simplement, ne compliquez pas trop les choses car vous risqueriez de vous retrouver dans les premières versions IE.
#index.html
<html>
<head>
<link rel="stylesheet" type="text/css" href="main.css">
<!--[if lte IE 9]>
<link rel="stylesheet" type="text/css" href="ie-only.css">
<![endif]-->
</head>
<body>
<div class="ie-only">Go upgrade your browser!</div>
</body>
</html>
#main.css
.ie-only { display: none }
#ie-only.css
.ie-only { display: block }
Voici une référence utile aux commentaires conditionnels .
var browser = {
isIe: function () {
return navigator.appVersion.indexOf("MSIE") != -1;
},
navigator: navigator.appVersion,
getVersion: function() {
var version = 999; // we assume a sane browser
if (navigator.appVersion.indexOf("MSIE") != -1)
// bah, IE again, lets downgrade version number
version = parseFloat(navigator.appVersion.split("MSIE")[1]);
return version;
}
};
if (browser.isIe() && browser.getVersion() <= 9) {
console.log("You are currently using Internet Explorer" + browser.getVersion() + " or are viewing the site in Compatibility View, please upgrade for a better user experience.")
}
var isIE9OrBelow = function()
{
return /MSIE\s/.test(navigator.userAgent) && parseFloat(navigator.appVersion.split("MSIE")[1]) < 10;
}
$ .browser () est supprimé de jquery version 1.9 utilise le code ci-dessous dans votre script,
(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"
};
};
// Don't clobber any existing jQuery.browser in case it's different
if ( !jQuery.browser ) {
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);
Ajusté à partir de Sitepoint :
if(navigator.appVersion.indexOf("MSIE 9.") !== -1)