Controlla se l’utente sta usando IE con jQuery

Sto chiamando una funzione come quella di seguito facendo clic su div con una certa class.

C’è un modo che posso controllare quando si avvia la funzione se un utente sta usando Internet Explorer e annulla / annulla se sta usando altri browser in modo che venga eseguito solo per gli utenti di IE? Gli utenti qui sarebbero tutti su IE8 o versioni successive quindi non avrei bisogno di coprire IE7 e versioni inferiori.

Se potessi dire quale browser stanno usando sarebbe bello ma non richiesto.

Funzione di esempio:

$('.myClass').on('click', function(event) { // my function }); 

Usa il seguente metodo JavaScript:

 function msieversion() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0) // If Internet Explorer, return version number { alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)))); } else // If another browser, return 0 { alert('otherbrowser'); } return false; } 

È ansible trovare i dettagli sotto il sito di supporto Microsoft:

Come determinare la versione del browser dallo script

Aggiornamento: (supporto IE 11)

 function msieversion() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // If Internet Explorer, return version number { alert(parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)))); } else // If another browser, return 0 { alert('otherbrowser'); } return false; } 

A partire da Internet Explorer 12+ (noto anche come Edge), la stringa agente utente è stata modificata, ancora una volta.

 /** * detect IE * returns version of IE or false, if browser is not Internet Explorer */ function detectIE() { var ua = window.navigator.userAgent; 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; } 

Esempio di utilizzo:

 alert('IE ' + detectIE()); 

Stringa predefinita di IE 10:

 Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0) 

Stringa predefinita di IE 11:

 Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko 

Stringa predefinita di IE 12 (alias Edge):

 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 

Stringa predefinita di Edge 13 (thx @DrCord):

 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 

Stringa predefinita di Edge 14:

 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/14.14300 

Test su CodePen:

http://codepen.io/gapcode/pen/vEJNZN

Semplicemente aggiungendo la risposta estremamente utile di Mario.

Se tutto quello che vuoi sapere è se il browser è IE o no, il codice può essere semplificato fino a:

 var ms_ie = false; var ua = window.navigator.userAgent; var old_ie = ua.indexOf('MSIE '); var new_ie = ua.indexOf('Trident/'); if ((old_ie > -1) || (new_ie > -1)) { ms_ie = true; } if ( ms_ie ) { //IE specific code goes here } 

Aggiornare

Lo consiglio ora. È ancora molto leggibile ed è molto meno codice 🙂

 var ua = window.navigator.userAgent; var is_ie = /MSIE|Trident/.test(ua); if ( is_ie ) { //IE specific code goes here } 

Grazie a JohnnyFun nei commenti per la risposta abbreviata 🙂

Ciò restituisce true per qualsiasi versione di Internet Explorer:

 function isIE(userAgent) { userAgent = userAgent || navigator.userAgent; return userAgent.indexOf("MSIE ") > -1 || userAgent.indexOf("Trident/") > -1 || userAgent.indexOf("Edge/") > -1; } 

Il parametro userAgent è facoltativo e assume come valore predefinito l’agente utente del browser.

Puoi usare l’object navigator per rilevare user-navigator, non hai bisogno di jquery per questo

  

http://www.javascriptkit.com/javatutors/navigator.shtml

Ecco come lo sta facendo il team Angularjs ( v 1.6.5 ):

 var msie, // holds major version number for IE, or NaN if UA is not IE. // Support: IE 9-11 only /** * documentMode is an IE-only property * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx */ msie = window.document.documentMode; 

Poi ci sono diverse righe di codice sparse per usarlo come un numero come

 if (event === 'input' && msie <= 11) return false; 

e

 if (enabled && msie < 8) { 

Utilizzando le risposte sopra; Booleano di ritorno semplice e condensato:

var isIE = /(MSIE|Trident\/|Edge\/)/i.test(navigator.userAgent);

Metodo 01:
$ .browser è stato deprecato in jQuery versione 1.3 e rimosso in 1.9

 if ( $.browser.msie) { alert( "Hello! This is IE." ); } 

Metodo 02:
Utilizzo di commenti condizionali

    

You're not using Internet Explorer.

Metodo 03:

  /** * Returns the version of Internet Explorer or a -1 * (indicating the use of another browser). */ function getInternetExplorerVersion() { var rv = -1; // Return value assumes failure. if (navigator.appName == 'Microsoft Internet Explorer') { var ua = navigator.userAgent; var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null) rv = parseFloat( RegExp.$1 ); } return rv; } function checkVersion() { var msg = "You're not using Internet Explorer."; var ver = getInternetExplorerVersion(); if ( ver > -1 ) { if ( ver >= 8.0 ) msg = "You're using a recent copy of Internet Explorer." else msg = "You should upgrade your copy of Internet Explorer."; } alert( msg ); } 

Metodo 04:
Usa rilevamento JavaScript / manuale

 /* Internet Explorer sniffer code to add class to body tag for IE version. Can be removed if your using something like Modernizr. */ var ie = (function () { var undef, v = 3, div = document.createElement('div'), all = div.getElementsByTagName('i'); while ( div.innerHTML = '', all[0]); //append class to body for use with browser support if (v > 4) { $('body').addClass('ie' + v); } }()); 

Link di riferimento

 function detectIE() { var ua = window.navigator.userAgent; var ie = ua.search(/(MSIE|Trident|Edge)/); return ie > -1; } 

Usando modernizr

 Modernizr.addTest('ie', function () { var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE ') > 0; var ie11 = ua.indexOf('Trident/') > 0; var ie12 = ua.indexOf('Edge/') > 0; return msie || ie11 || ie12; }); 

So che questa è una vecchia domanda, ma nel caso in cui qualcuno la trovi di nuovo e abbia problemi con il rilevamento di IE11, ecco una soluzione funzionante per tutte le versioni correnti di IE.

 var isIE = false; if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { isIE = true; } 

l’ho usato

 function notIE(){ var ua = window.navigator.userAgent; if (ua.indexOf('Edge/') > 0 || ua.indexOf('Trident/') > 0 || ua.indexOf('MSIE ') > 0){ return false; }else{ return true; } } 

Ancora un’altra semplice (ma leggibile dall’uomo) funzione per rilevare se il browser è IE o meno (ignorando Edge, che non è affatto male):

 function isIE() { var ua = window.navigator.userAgent; var msie = ua.indexOf('MSIE '); // IE 10 or older var trident = ua.indexOf('Trident/'); //IE 11 return (msie > 0 || trident > 0); } 

Se non vuoi usare l’useragent, puoi anche farlo per verificare se il browser è IE. Il codice commentato viene eseguito in realtà nei browser IE e trasforma il “falso” in “vero”.

 var isIE = /*@[email protected]*/false; if(isIE){ //The browser is IE. }else{ //The browser is NOT IE. } 

La soluzione di @ SpiderCode non funziona con IE 11. Ecco la soluzione migliore che ho utilizzato da ora in poi nel mio codice in cui ho bisogno del rilevamento del browser per determinate funzionalità.

IE11 non riporta più come MSIE, secondo questo elenco di modifiche, è intenzionale evitare il rilevamento errato.

Cosa si può fare se si vuole veramente sapere che IE è rilevare il Trident / stringa nell’agent user se navigator.appName restituisce Netscape, qualcosa di simile (non testato);

Grazie a questa risposta

 function isIE() { var rv = -1; if (navigator.appName == 'Microsoft Internet Explorer') { var ua = navigator.userAgent; var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null) rv = parseFloat( RegExp.$1 ); } else if (navigator.appName == 'Netscape') { var ua = navigator.userAgent; var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null) rv = parseFloat( RegExp.$1 ); } return rv == -1 ? false: true; } 

Di seguito ho trovato un modo elegante per farlo mentre su Google —

 / detect IE var IEversion = detectIE(); if (IEversion !== false) { document.getElementById('result').innerHTML = 'IE ' + IEversion; } else { document.getElementById('result').innerHTML = 'NOT IE'; } // add details to debug result document.getElementById('details').innerHTML = window.navigator.userAgent; /** * 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'; // IE 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 (IE 12+) // 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; } 

Molte risposte qui e vorrei aggiungere il mio contributo. IE 11 era un tale asso riguardo a flexbox (vedi tutti i suoi problemi e incongruenze qui ) che avevo davvero bisogno di un modo semplice per verificare se un utente sta usando un browser IE (fino a 11 incluso) escludendo Edge, perché Edge è in realtà molto carino.

In base alle risposte fornite qui, ho scritto una semplice funzione che restituisce una variabile booleana globale che è ansible utilizzare in seguito. È molto facile controllare per IE.

 var isIE; (function() { var ua = window.navigator.userAgent, msie = ua.indexOf('MSIE '), trident = ua.indexOf('Trident/'); isIE = (msie > -1 || trident > -1) ? true : false; })(); if (isIE) { alert("I am an Internet Explorer!"); } 

In questo modo è sufficiente effettuare una sola ricerca e memorizzare il risultato in una variabile, piuttosto che dover recuperare il risultato su ogni chiamata di funzione. (Per quanto ne so, non devi nemmeno aspettare che il documento sia pronto per eseguire questo codice poiché l’user-agent non è collegato al DOM.)

Prova questo se stai usando la versione jquery> = 1.9 ,

 var browser; 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) || /(Trident)[\/]([\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; } 

Se si utilizza la versione jQuery <1.9 ($ .browser è stato rimosso in jQuery 1.9) utilizzare invece il seguente codice:

 $('.myClass').on('click', function (event) { if ($.browser.msie) { alert($.browser.version); } }); 

Aggiorna la risposta di SpiderCode per risolvere i problemi in cui la stringa “MSIE” restituisce -1 ma corrisponde a “Trident”. Era solito restituire NAN, ma ora restituisce 11 per quella versione di IE.

  function msieversion() { var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > -1) { return ua.substring(msie + 5, ua.indexOf(".", msie)); } else if (navigator.userAgent.match(/Trident.*rv\:11\./)) { return 11; } else { return false; } } 

Puoi controllare tutti gli Internet Explorer (Ultima versione Tested 12).

  

Vedi qui https://jsfiddle.net/v7npeLwe/

 function msieversion() { var ua = window.navigator.userAgent; console.log(ua); var msie = ua.indexOf("MSIE "); if (msie > -1 || navigator.userAgent.match(/Trident.*rv:11\./)) { // If Internet Explorer, return version numbe // You can do what you want only in IE in here. var version_number=parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))); if (isNaN(version_number)) { var rv_index=ua.indexOf("rv:"); version_number=parseInt(ua.substring(rv_index+3,ua.indexOf(".",rv_index))); } console.log(version_number); } else { //other browser console.log('otherbrowser'); } } 

Si dovrebbe vedere il risultato in console, si prega di utilizzare Chrome Inspect.

Ho inserito questo codice nella funzione pronta per il documento e si triggers solo in Internet Explorer. Testato su Internet Explorer 11.

 var ua = window.navigator.userAgent; ms_ie = /MSIE|Trident/.test(ua); if ( ms_ie ) { //Do internet explorer exclusive behaviour here } 

Prova a fare così

 if ($.browser.msie && $.browser.version == 8) { //my stuff } 

Penso che ti aiuterà Qui

 function checkIsIE() { var isIE = false; if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) { isIE = true; } if (isIE) // If Internet Explorer, return version number { kendo.ui.Window.fn._keydown = function (originalFn) { var KEY_ESC = 27; return function (e) { if (e.which !== KEY_ESC) { originalFn.call(this, e); } }; }(kendo.ui.Window.fn._keydown); var windowBrowser = $("#windowBrowser").kendoWindow({ modal: true, id: 'dialogBrowser', visible: false, width: "40%", title: "Thông báo", scrollable: false, resizable: false, deactivate: false, position: { top: 100, left: '30%' } }).data('kendoWindow'); var html = '

Please use the browser below to use the tool

'; html += ''; html += ' '; html += ' '; html += '
'; windowBrowser.content(html); windowBrowser.open(); $("#windowBrowser").parent().find(".k-window-titlebar").remove(); } else // If another browser, return 0 { return false; } }

Funziona solo sotto la versione di IE 11.

 var ie_version = parseInt(window.navigator.userAgent.substring(window.navigator.userAgent.indexOf("MSIE ") + 5, window.navigator.userAgent.indexOf(".", window.navigator.userAgent.indexOf("MSIE ")))); 

console.log("version number",ie_version);

Puoi usare $.browser per ottenere informazioni su nome, fornitore e versione.

Vedi http://api.jquery.com/jQuery.browser/