J'ai beaucoup regardé autour de moi et j'ai cru comprendre qu'il y avait beaucoup de façons de détecter Internet Explorer.
Mon problème est le suivant: mon document HTML contient une zone qui appelle une fonction JavaScript incompatible avec Internet Explorer, quelle qu'elle soit. Je souhaite détecter si IE est utilisé et, dans l'affirmative, définissez la variable sur true.
Le problème, c’est que j’écris mon code avec Notepad ++ et que, lorsque j’exécute le code HTML dans un navigateur, aucune des méthodes de détection de IE ne fonctionne. Je pense que le problème est que je l’utilise sous Notepad ++. Je dois être capable de détecter IE, afin de pouvoir désactiver cette zone du site en fonction de la variable. J'ai essayé ceci:
var isIE10 = false;
if (navigator.userAgent.indexOf("MSIE 10") > -1) {
// this is internet Explorer 10
isIE10 = true;
window.alert(isIE10);
}
var isIE = (navigator.userAgent.indexOf("MSIE") != -1);
if(isIE){
if(!isIE10){
window.location = 'pages/core/ie.htm';
}
}
mais ça ne marche pas. Comment détecter IE dans Notepad ++? C'est ce que je teste le code HTML, mais j'ai besoin d'une méthode qui fonctionnera avec cela.
J'ai remarqué que quelqu'un a marqué cela comme un doublon, et c'est compréhensible. Je suppose que je n'étais pas clair. Je ne peux pas utiliser de réponse JQuery. Ce n'est donc pas un doublon, je demande une réponse JS de Vanilla.
Existe-t-il également un moyen de détecter le navigateur Microsoft Edge?
Je ne sais pas pourquoi, mais je ne vois pas le mot "Edge" dans l'agent utilisateur, comme tout le monde en parle, j'ai donc dû emprunter un autre chemin susceptible d'aider certaines personnes.
Au lieu de regarder navigator.userAgent, j'ai consulté navigator.appName pour savoir s'il s'agissait d'IE <= 10 ou d'IE11 et Edge. IE11 et Edge utilisent l'appName de "Netscape", tandis que toutes les autres itérations utilisent "Microsoft Internet Explorer".
Une fois que nous avons déterminé que le navigateur est IE11 ou Edge, j'ai ensuite consulté navigator.appVersion. J'ai remarqué que dans IE11, la chaîne était assez longue et contenait beaucoup d'informations. J'ai arbitrairement choisi le mot "Trident", qui ne figure certainement pas dans navigator.appVersion for Edge. Tester pour cette Parole m'a permis de distinguer les deux.
Vous trouverez ci-dessous une fonction qui renverra une valeur numérique indiquant le navigateur Internet Explorer utilisé. Si sur Microsoft Edge, le nombre 12 est renvoyé.
Bonne chance et j'espère que cela aide!
function Check_Version(){
var rv = -1; // Return value assumes failure.
if (navigator.appName == 'Microsoft Internet Explorer'){
var ua = navigator.userAgent,
re = new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})");
if (re.exec(ua) !== null){
rv = parseFloat( RegExp.$1 );
}
}
else if(navigator.appName == "Netscape"){
/// in IE 11 the navigator.appVersion says 'trident'
/// in Edge the navigator.appVersion does not say trident
if(navigator.appVersion.indexOf('Trident') === -1) rv = 12;
else rv = 11;
}
return rv;
}
Voici la dernière méthode correcte que je connaisse pour vérifier IE et Edge:
if (/MSIE 10/i.test(navigator.userAgent)) {
// This is internet Explorer 10
window.alert('isIE10');
}
if (/MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent)) {
// This is internet Explorer 9 or 11
window.location = 'pages/core/ie.htm';
}
if (/Edge\/\d./i.test(navigator.userAgent)){
// This is Microsoft Edge
window.alert('Microsoft Edge');
}
Notez que vous n'avez pas besoin de la variable supplémentaire isIE10 dans votre code car elle effectue maintenant des contrôles très spécifiques.
Consultez également cette page pour connaître les dernières chaînes IE et d'agent utilisateur Edge, car cette réponse risque de devenir obsolète à un moment donné: https://msdn.Microsoft.com/en-us/library/ hh869301% 28v = vs.85% 29.aspx
// detect IE8 and above, and Edge
if (document.documentMode || /Edge/.test(navigator.userAgent)) {
... do something
}
Explication:
document.documentMode
Une propriété IE uniquement, d'abord disponible dans IE8.
/Edge/
Une expression régulière pour rechercher la chaîne 'Edge' - que nous testons ensuite avec la propriété 'navigator.userAgent'
J'utilise UAParser https://github.com/faisalman/ua-parser-js
var a = new UAParser();
var name = a.getResult().browser.name;
var version = a.getResult().browser.version;
Le sujet est un peu ancien, mais comme les scripts ici détectent Firefox comme un faux positif (Edge v12), voici la version que j'utilise:
function isIEorEDGE(){
if (navigator.appName == 'Microsoft Internet Explorer'){
return true; // IE
}
else if(navigator.appName == "Netscape"){
return navigator.appVersion.indexOf('Edge') > -1; // Edge
}
return false;
}
qui peut bien sûr être écrit de manière plus concise:
function isIEorEDGE(){
return navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1);
}
Cette fonction a parfaitement fonctionné pour moi. Il détecte également Edge.
À l'origine de ce codepen:
https://codepen.io/gapcode/pen/vEJNZN
/**
* detect IE
* returns version of IE or false, if browser is not Internet Explorer
*/
function detectIE() {
var ua = window.navigator.userAgent;
// Test values; Uncomment to check result …
// IE 10
// ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';
// IE 11
// ua = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';
// Edge 12 (Spartan)
// ua = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';
// Edge 13
// ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';
var msie = ua.indexOf('MSIE ');
if (msie > 0) {
// IE 10 or older => return version number
return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
}
var trident = ua.indexOf('Trident/');
if (trident > 0) {
// IE 11 => return version number
var rv = ua.indexOf('rv:');
return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
var Edge = ua.indexOf('Edge/');
if (Edge > 0) {
// Edge (IE 12+) => return version number
return parseInt(ua.substring(Edge + 5, ua.indexOf('.', Edge)), 10);
}
// other browser
return false;
}
Ensuite, vous pouvez utiliser if (detectIE()) { /* do IE stuff */ }
dans votre code.
Si vous voulez juste donner aux utilisateurs qui utilisent un navigateur MS un avertissement ou quelque chose, ce code devrait être bon.
HTML:
<p id="IE">You are not using a Microsoft browser</p>
Javascript:
using_ms_browser = navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Edge') > -1) || (navigator.appName == "Netscape" && navigator.appVersion.indexOf('Trident') > -1);
if (using_ms_browser == true){
document.getElementById('IE').innerHTML = "You are using a MS browser"
}
Merci à @GavinoGrifoni
Pour moi, mieux cela:
var uA = window.navigator.userAgent,
onlyIEorEdge = /msie\s|trident\/|Edge\//i.test(uA) && !!( document.uniqueID || window.MSInputMethodContext),
checkVersion = (onlyIEorEdge && +(/(Edge\/|rv:|msie\s)([\d.]+)/i.exec(uA)[2])) || NaN;
Allez courir: http://output.jsbin.com/solicul/1/ o http://jsfiddle.net/Webnewbie/apa1nvu8/
Utilisez cette snip: var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;
Voici une classe javascript qui détecte IE10, IE11 et Edge.
L’objet Navigator est injecté à des fins de test.
var DeviceHelper = function (_navigator) {
this.navigator = _navigator || navigator;
};
DeviceHelper.prototype.isIE = function() {
if(!this.navigator.userAgent) {
return false;
}
var IE10 = Boolean(this.navigator.userAgent.match(/(MSIE)/i)),
IE11 = Boolean(this.navigator.userAgent.match(/(Trident)/i));
return IE10 || IE11;
};
DeviceHelper.prototype.isEdge = function() {
return !!this.navigator.userAgent && this.navigator.userAgent.indexOf("Edge") > -1;
};
DeviceHelper.prototype.isMicrosoftBrowser = function() {
return this.isEdge() || this.isIE();
};