Ich habe mich viel umgesehen und verstehe, dass es viele Möglichkeiten gibt, den Internet Explorer zu erkennen.
Mein Problem ist folgendes: Ich habe einen Bereich in meinem HTML-Dokument, der beim Klicken eine JavaScript-Funktion aufruft, die mit Internet-Explorern jeglicher Art nicht kompatibel ist. Ich möchte erkennen, ob der IE verwendet wird, und wenn ja, die Variable auf true setzen.
Das Problem ist, dass ich meinen Code aus Notepad ++ schreibe und wenn ich den HTML-Code im Browser ausführe, funktioniert keine der Methoden zum Erkennen von IE. Ich denke, das Problem ist, dass mir Notepad ++ ausgeht. Ich muss in der Lage sein, IE zu erkennen, damit ich basierend auf der Variablen diesen Bereich der Site deaktivieren kann. Ich habe das versucht:
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';
}
}
aber es funktioniert nicht. Wie kann ich IE aus Notepad ++ erkennen? Das ist es, woraus ich den HTML-Code teste, aber ich brauche eine Methode, die damit funktioniert.
bearbeiten
Mir ist aufgefallen, dass jemand dies als Duplikat markiert hat, und das ist verständlich. Ich war wohl nicht klar. Ich kann keine JQuery-Antwort verwenden, daher handelt es sich nicht um ein Duplikat, da ich nach einer Vanille-JS-Antwort frage.
Bearbeiten Sie # 2
Gibt es auch eine Möglichkeit, den Microsoft Edge-Browser zu erkennen?
quelle
Antworten:
Ich weiß nicht warum, aber ich sehe "Edge" nicht im userAgent, wie es alle anderen sagen, also musste ich einen anderen Weg einschlagen, der einigen Leuten helfen könnte.
Anstatt auf navigator.userAgent zu schauen, habe ich auf navigator.appName geschaut, um zu unterscheiden, ob es sich um IE <= 10 oder IE11 und Edge handelt. IE11 und Edge verwenden den App-Namen "Netscape", während jede andere Iteration "Microsoft Internet Explorer" verwendet.
Nachdem wir festgestellt haben, dass der Browser entweder IE11 oder Edge ist, habe ich nach navigator.appVersion gesucht. Mir ist aufgefallen, dass die Zeichenfolge in IE11 ziemlich lang war und viele Informationen enthielt. Ich habe willkürlich das Wort "Trident" ausgewählt, das definitiv nicht im navigator.appVersion for Edge enthalten ist. Durch Testen auf dieses Wort konnte ich die beiden unterscheiden.
Unten finden Sie eine Funktion, die einen numerischen Wert zurückgibt, für den der Benutzer den Internet Explorer verwendet. Bei Microsoft Edge wird die Nummer 12 zurückgegeben.
Viel Glück und ich hoffe das hilft!
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; }
quelle
navigator.appName == "Netscape"
als wahr ausgewertet.Hier ist die neueste korrekte Methode, mit der ich nach IE und Edge suchen kann:
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'); }
Beachten Sie, dass Sie die zusätzliche Variable isIE10 in Ihrem Code nicht benötigen, da sie jetzt sehr spezifische Überprüfungen durchführt.
Auf dieser Seite finden Sie auch die neuesten Zeichenfolgen für IE- und Edge-Benutzeragenten, da diese Antwort möglicherweise irgendwann veraltet ist: https://msdn.microsoft.com/en-us/library/hh869301%28v=vs.85%29. aspx
quelle
navigator.userAgent
meine Win10 / Edge-VM einchecke, erhalte ich nur den ersten Teil davon, der die"Edge"
Zeichenfolge nicht enthält .// detect IE8 and above, and Edge if (document.documentMode || /Edge/.test(navigator.userAgent)) { ... do something }
Erläuterung:
document.documentMode
Eine Eigenschaft nur für IE, die zuerst in IE8 verfügbar ist.
Ein regulärer Ausdruck für die Suche nach der Zeichenfolge 'Edge', die wir dann anhand der Eigenschaft 'navigator.userAgent' testen
Update März 2020
@Jam kommentiert, dass die neueste Version von Edge jetzt
Edg
als Benutzeragent gemeldet wird. Der Scheck wäre also:if (document.documentMode || /Edge/.test(navigator.userAgent) || /Edg/.test(navigator.userAgent)) { ... do something }
quelle
/Edge\//.test(navigator.userAgent)
Um robuster zu werden, bevorzuge ich den Backslash.document.documentMode || /Edge\//.test(navigator.userAgent) || /Edg\//.test(navigator.userAgent)
Ich verwende UAParser https://github.com/faisalman/ua-parser-js
var a = new UAParser(); var name = a.getResult().browser.name; var version = a.getResult().browser.version;
quelle
Das Thema ist etwas alt, aber da die Skripte hier Firefox als falsch positiv erkennen (EDGE v12), ist hier die Version, die ich verwende:
function isIEorEDGE(){ if (navigator.appName == 'Microsoft Internet Explorer'){ return true; // IE } else if(navigator.appName == "Netscape"){ return navigator.userAgent.indexOf('.NET') > -1; // Only Edge uses .NET libraries } return false; }
was natürlich prägnanter geschrieben werden kann:
function isIEorEDGE(){ return navigator.appName == 'Microsoft Internet Explorer' || (navigator.appName == "Netscape" && navigator.userAgent.indexOf('.NET') > -1); }
quelle
navigator.appVersion
: Jetzt enthält es nicht mehr "Trident", sondern sie fügen dem Namen "Edge" hinzu. Aktualisiere meine Antwort jetzt!Netscape
als appName ...Diese Funktion hat bei mir perfekt funktioniert. Es erkennt auch Edge.
Ursprünglich aus diesem 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; }
Dann können Sie
if (detectIE()) { /* do IE stuff */ }
in Ihrem Code verwenden.quelle
Wenn Sie Benutzern, die einen MS-Browser verwenden, nur eine Warnung oder ähnliches geben möchten, sollte dieser Code gut sein.
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" }
Vielen Dank an @GavinoGrifoni
quelle
Für mich besser das:
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;
Gehen Sie los: http://output.jsbin.com/solicul/1/ o http://jsfiddle.net/Webnewbie/apa1nvu8/
quelle
Verwenden Sie diesen Snip:
var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false;
quelle
navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1
wird als wahr oder falsch ausgewertet, sodass Sie das einfach zurückgeben / verwenden können.Ein Zeilencode zur Erkennung des Browsers.
Wenn der Browser IE oder Edge ist, wird true zurückgegeben.
let isIE = /edge|msie\s|trident\//i.test(window.navigator.userAgent)
quelle
Hier ist eine Javascript-Klasse, die IE10, IE11 und Edge erkennt.
Das Navigatorobjekt wird zu Testzwecken injiziert.
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(); };
quelle
Wenn wir Edge überprüfen müssen, gehen Sie bitte damit um
if (navigator.userAgent.indexOf ("Edge")> 1) {
//do something
}}
quelle
Erstens ist es sicher nicht das Notepad ++ Problem. Es ist Ihr " String Matching Problem "
Die gemeinsame Zeichenfolge in allen IE-Versionen lautet MSIE. Überprüfen Sie die verschiedenen userAgent-Zeichenfolgen unter http://www.useragentstring.com/pages/Internet%20Explorer/.
if(navigator.userAgent.indexOf("MSIE") != -1){ alert('I am Internet Explorer!!'); }
quelle