Sprawdź, czy użytkownik używa IE

390

Wywołuję funkcję taką jak ta poniżej, klikając div z określoną klasą.

Czy jest sposób, aby sprawdzić podczas uruchamiania funkcji, czy użytkownik korzysta z Internet Explorera, i przerwać / anulować, jeśli korzystają z innych przeglądarek, aby działał tylko dla użytkowników IE? Użytkownicy tutaj byliby na IE8 lub wyższych wersjach, więc nie musiałbym obejmować IE7 i niższych wersji.

Gdybym mógł powiedzieć, z której przeglądarki korzystają, byłoby świetnie, ale nie jest wymagane.

Przykładowa funkcja:

$('.myClass').on('click', function(event)
{
    // my function
});
użytkownik2571510
źródło
1
Użyj moderatora, aby wykryć IE lub inne przeglądarki. stackoverflow.com/questions/13478303/…
Chris
7
Zgodnie z nowoczesnymi standardami tworzenia stron internetowych, od czasu do czasu tworzenie starych wersji IE jest złą praktyką.
Rosseyn,
7
W rzeczywistości ta „zła praktyka” jest wymuszona przez same standardy, więc nie jest to wina programisty ... Przeglądarki działają inaczej, a specyfikacje są zbyt miękkie w kwestiach związanych z implementacją. W celu zapewnienia, że coś jest nie buggy i nie nudny jako jeden cholery ma zrobić wykrywania przeglądarki. Proponuję inny najlepszej praktyki: With modern web development, it's bad practice to support non-Chromium-based browsers (with Safari not considered to be Chromium-based at all). Przepraszam, ale to szaleństwo musi się kiedyś skończyć i jakoś ...
user2173353
2
Lepszym rozwiązaniem jest dziś „wykrywanie funkcji” niż „wykrywanie przeglądarki”. Zapytaj, czy przeglądarka robi to, czego potrzebujesz.
Chris Rogers,
2
@Chris - przeprosiny ... przeznaczone do tego, aby mieć bardziej żartobliwy ton. Będę winić IE za kradzież mojej radości i pozostawienie mnie z goryczą i frustracją. :)
JDB wciąż pamięta Monikę

Odpowiedzi:

477

Użyj poniższej metody 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;
}

Szczegółowe informacje można znaleźć na stronie pomocy technicznej Microsoft:

Jak ustalić wersję przeglądarki ze skryptu

Aktualizacja: (obsługa 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;
}
SpiderCode
źródło
27
chociaż działałoby to dobrze, ponieważ zmienna ua nigdy nie zaczyna się od MSIE, pisanie if (msie > 0)jest mylące. Jeśli wartość nie zostanie znaleziona, funkcja indexOf () zwraca -1, a nie 0. Dlatego if (msie > -1)byłoby bardziej objaśniające.
Neville Nazerane
61
To zwraca NaN w IE11, dla mnie.
weralizm
7
@verism i inni: sprawdź tę odpowiedź, która działa również dla IE 11: stackoverflow.com/a/21712356/114029
Leniel Maccaferri
8
navigator.userAgent.indexOf („MSIE”)> 0 || navigator.userAgent.indexOf („Trident”)> 0 || navigator.userAgent.indexOf („Edge”)> 0
tylermauthe
12
/Edge\/|Trident\/|MSIE /.test(window.navigator.userAgent)Wiem, że działa to na 10 i 11. Jeśli możesz zweryfikować <IE9 i Edge, edytuj odpowiedź.
Indolering
595

Minęło kilka lat później, a przeglądarka Edge używa teraz Chromium jako silnika renderowania.
Niestety, sprawdzanie IE 11 nadal jest problemem.

Oto bardziej proste podejście, ponieważ starożytne wersje IE powinny zniknąć.

if (window.document.documentMode) {
  // Do IE stuff
}

Oto moja stara odpowiedź (2014):

W Edge zmieniono ciąg agenta użytkownika .

/**
 * detect IEEdge
 * returns version of IE/Edge or false, if browser is not a Microsoft browser
 */
function detectIEEdge() {
    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 => return version number
       return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
    }

    // other browser
    return false;
}

Przykładowe użycie:

alert('IEEdge ' + detectIEEdge());

Domyślny ciąg IE 10:

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

Domyślny ciąg IE 11:

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

Domyślny ciąg Edge 12:

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 

Domyślny ciąg 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 

Domyślny ciąg 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 

Domyślny ciąg Edge 15:

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

Domyślny ciąg Edge 16:

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

Domyślny ciąg Edge 17:

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

Domyślny ciąg Edge 18 (podgląd poufnych informacji):

Mozilla/5.0 (Windows NT 10.0; Win64; x64; ServiceUI 14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17730 

Test w CodePen:

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

Mario
źródło
4
Dziękujemy za komentowanie. Nie zweryfikowałem jeszcze twojej odpowiedzi, ale chcę skomentować jedno: jako pierwsze „jeśli” zawiera „zwrot”, nie potrzebujesz później „innego”.
Mario
30
Ciekawe, dlaczego, do cholery, zmieniają linię agenta użytkownika w nowych wersjach IE? MS poważnie nie chce, abyśmy wykryli ich okropną przeglądarkę internetową.
c00000fd
3
@SameerAlibhai Co brzmi dobrze w teorii, ale w praktyce, szczególnie obecnie, nie jest praktyczne. Czasami pojawiają się problemy, które nie obejmują pojedynczego wykrywania „funkcji”, a ponadto niektóre funkcje mają dziwactwa związane z implementacją, które można obejść tylko przy znajomości przeglądarki. Co jeśli chcę zrobić coś prostego, np. Zebrać statystyki przeglądarki?
Niewielkie
34
Należy zauważyć, że Edge nie jest tak naprawdę „IE12”, ale w rzeczywistości jest całkowicie oddzielną przeglądarką. Windows 10 ma zarówno zainstalowany IE11, jak i Edge.
moloko
16
moja nienawiść do IE rośnie
Kolob Canyon
135

Jeśli wszystko, co chcesz wiedzieć, to czy przeglądarka to IE, czy nie, możesz to zrobić:

var isIE = 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)) {
    isIE = true;
}

if ( isIE ) {
    //IE specific code goes here
}

Aktualizacja 1: lepsza metoda

Polecam to teraz. Jest nadal bardzo czytelny i zawiera znacznie mniej kodu :)

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  //IE specific code goes here
}

Dzięki JohnnyFun w komentarzach do skróconej odpowiedzi :)

Aktualizacja 2: Testowanie IE w CSS

Po pierwsze, jeśli możesz, powinieneś użyć @supportsinstrukcji zamiast JS do sprawdzenia, czy przeglądarka obsługuje określoną funkcję CSS.

.element {
  /* styles for all browsers */
}

@supports (display: grid) {
  .element {
    /* styles for browsers that support display: grid */
  }
}

(Pamiętaj, że IE w ogóle nie obsługuje @supportsi zignoruje wszelkie style umieszczone w pliku@supports instrukcji).

Jeśli problemu nie można rozwiązać, @supportsmożesz to zrobić:

// JS

var ua = window.navigator.userAgent;
var isIE = /MSIE|Trident/.test(ua);

if ( isIE ) {
  document.documentElement.classList.add('ie')
}
/* CSS */

.element {
  /* styles that apply everywhere */
}

.ie .element {
  /* styles that only apply in IE */
}

(Uwaga: classListjest stosunkowo nowy w JS i myślę, że z przeglądarek IE działa tylko w IE11. Prawdopodobnie także IE10.)

Jeśli używasz SCSS (Sass) w swoim projekcie, można to uprościć:

/* SCSS (Sass) */

.element {
  /* styles that apply everywhere */

  .ie & {
    /* styles that only apply in IE */
  }
}

Aktualizacja 3: Dodawanie Microsoft Edge (niezalecane)

Jeśli chcesz również dodać Microsoft Edge do listy, możesz wykonać następujące czynności. Jednak nie polecam go, ponieważ Edge jest znacznie bardziej kompetentną przeglądarką niż IE.

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

if ( isIE ) {
  //IE & Edge specific code goes here
}
Daniel Tonon
źródło
5
Lub to samo w kilku bajtach: ms_ie = ~ ua.indexOf ('MSIE') || ~ ua.indexOf ('Trident /'); ;-)
Simon Steinberger,
12
Moja wersja ma jednak bardziej bezpośredni sens dla człowieka, ale mniej bajtów jest zawsze dobre :)
Daniel Tonon
7
lubms_ie = !!ua.match(/MSIE|Trident/)
xori
5
lub ms_ie = /MSIE|Trident/.test(ua)
JohnnyFun 14.10.16
1
@SimonSteinberger ~ma jakieś znaczenie?
1,21 gigawatów
45

Zwraca to truedla dowolnej wersji Internet Explorera:

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

Ten userAgentparametr jest opcjonalny i domyślnie jest ustawiony na klienta użytkownika przeglądarki.

bendytree
źródło
To powinno być dobre, ale po prostu zapomniałeś ustawić domyślną wartość „return true” lub „return 1” dla przeglądarek IE. To obecnie nie zwraca żadnej wartości po wykryciu przeglądarek IE.
Vincent Edward Gedaria Binua,
10
Dlaczego chcesz traktować Edge jak IE? Pod względem kompatybilności mają one obecnie niewiele wspólnego.
minexew
@docta_faustus userAgent to parametr, a nie globalny
bendytree
29

Tak właśnie robi zespół Angularjs (wersja 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;

Następnie jest kilka wierszy kodu rozrzuconych po całym obszarze, używając go jako liczby, takiej jak

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

i

if (enabled && msie < 8) {
ThisClark
źródło
window.document.documentMode jest niezdefiniowany w MS Edge
Veselin Vasilev
25
nie jest zdefiniowane w MS Edge, ponieważ MS Edge nie jest IE!
JCKödel,
1
document.documentModejest obsługiwany przez IE8 +. Będzie 'undefined'dla Edge lub Chrome / FireFox ... Zmieniłem ten kod na var IEver = window.document.documentMode || (window.attachEvent? 1 : 99);taki, że zwraca dokładną wersję IE dla IE8 +, 99 dla przeglądarek innych niż IE (zwykle będzie to nowoczesna przeglądarka) i 1 dla starych IE5-7. Jest tak napisane, ponieważ zwykle potrzebujemy specjalnej pracy tylko dla niektórych starszych IE. if (IEver < 9) { ... }Oznacza to , że jeśli jest to stara IE
S.Serpooshan
29

Możesz użyć obiektu navigator do wykrycia użytkownika nawigatora, nie potrzebujesz do niego jquery

<script type="text/javascript">

if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) || navigator.userAgent.indexOf("Trident/") > -1 ){ 

 // Do stuff with Internet-Exploders ... :)
}

</script>

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

John Smith
źródło
4
To daje mi fałsz dla mojego IE11
Curtis
2
Klient użytkownika IE11 jest inny niż MSIE (XX); IE11 można znaleźć, sprawdzając Trident.
Orfeusz
To daje wynik fałszywie dodatni w przeglądarce Firefox 45.0.2.
Tim S. Van Haren
zły test indexOf nie zwraca true lub false, podobnie jak regex funkcji testowej, masz navigator.userAgent.indexOf ("Trident /")! = -1
Dahar Youssef
10

Korzystając z powyższych odpowiedzi; proste i skrócone zwracanie wartości logicznej:

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

gdibble
źródło
1
Zwraca false w FireFox 44.0.2 w Widnows 10. Jaka wersja FireFox zwraca true @ SiKni8?
Arthur Hebert
9

Metoda 01:
$ .browser został uznany za przestarzały w wersji jQuery 1.3 i usunięty w wersji 1.9

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

Metoda 02:
Korzystanie z komentarzy warunkowych

<!--[if gte IE 8]>
<p>You're using a recent version of Internet Explorer.</p>
<![endif]-->

<!--[if lt IE 7]>
<p>Hm. You should upgrade your copy of Internet Explorer.</p>
<![endif]-->

<![if !IE]>
<p>You're not using Internet Explorer.</p>
<![endif]>

Metoda 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 );
}

Metoda 04:
Użyj JavaScript / ręcznego wykrywania

/*
     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 = '<!--[if gt IE ' + (++v) + ']><i></i>< ![endif]-->',
     all[0]);

     //append class to body for use with browser support
     if (v > 4)
     {
         $('body').addClass('ie' + v);
     }

 }());

Link referencyjny

Aamir Shahzad
źródło
@radhe Zaktualizowałem odpowiedź, mam nadzieję, że to zadziała dla ciebie.
Aamir Shahzad,
Uwaga: Metoda 2 nie będzie działać w IE10 lub lepiej w trybie standardowym. Aby uzyskać więcej informacji: komentarze warunkowe nie są już obsługiwane
inserttusernamehere
@sersersersername masz rację, ponieważ myślę, że użycie .ie10klasy jest jedną z najlepszych opcji, jeśli robisz jakąś poprawkę css tylko dla ie10. Ponieważ Internet Explorer 10 dodaje ".ie10"klasę do elementu HTML <html class="ie10">, możesz go używać w następujący sposób.ie10 .myclass {//some css here}
Aamir Shahzad
8

Chciałem tylko sprawdzić, czy przeglądarka ma IE11 lub starszą wersję, bo cóż, to bzdury.

function isCrappyIE() {
    var ua = window.navigator.userAgent;
    var crappyIE = false;
    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {// IE 10 or older => return version number        
        crappyIE = true;
    }
    var trident = ua.indexOf('Trident/');
    if (trident > 0) {// IE 11 => return version number        
        crappyIE = true;
    }
    return crappyIE;
}   

if(!isCrappyIE()){console.table('not a crappy browser);}
Bill_VA
źródło
2
zyskuje to mój głos za wysoki szacunek dla standardów konwencji nazewnictwa
redbandit
7
function detectIE() {
    var ua = window.navigator.userAgent;
    var ie = ua.search(/(MSIE|Trident|Edge)/);

    return ie > -1;
}
headione
źródło
Nie odpowiada na pytanie. Edge nie jest IE.
hda
hda, pytanie pochodzi z 2013 roku, myślę, że dzisiaj nie warto ignorować „Edge”
Szef COTIGA
5

Korzystanie z modernizatora

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;
});
kevnk
źródło
Nie odpowiada na pytanie, ponieważ Edge nie jest IE. Również Edge nie jest IE12. Po wydaniu Edge opartej na Chromium powinieneś również dodać Chrome lub Opera do tej listy. (Cokolwiek byś przez to osiągnął, łatwiej byłoby wtedy wykryć Firefoksa)
hda
5

Lub ta naprawdę krótka wersja zwraca wartość true, jeśli przeglądarkami jest Internet Explorer:

function isIe() {
    return window.navigator.userAgent.indexOf("MSIE ") > 0
        || !!navigator.userAgent.match(/Trident.*rv\:11\./);
}
Floris
źródło
4

Jeszcze jedna prosta (ale czytelna dla człowieka) funkcja wykrywająca, czy przeglądarka jest IE, czy nie (ignorując Edge, co wcale nie jest złe):

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);
}
Chuck Le Butt
źródło
3

Jeśli nie chcesz używać narzędzia użytkownika, możesz to zrobić, aby sprawdzić, czy przeglądarka to IE. Skomentowany kod faktycznie działa w przeglądarkach IE i zmienia „fałsz” na „prawda”.

var isIE = /*@cc_on!@*/false;
if(isIE){
    //The browser is IE.
}else{
    //The browser is NOT IE.
}   
dev4life
źródło
1
IE11 nie obsługuje kompilacji warunkowej
Gabriel Llamas
Właśnie tego spróbowałem i nadal działało. Czy jesteś pewien, że to nie obsługuje?
dev4life 16.01.2015
3

Wiem, że jest to stare pytanie, ale na wypadek, gdyby ktoś napotkał je ponownie i miał problemy z wykryciem IE11, oto działające rozwiązanie dla wszystkich obecnych wersji IE.

var isIE = false;
if (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0) {
    isIE = true;   
}
Ty Bailey
źródło
3

użyłem tego

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;                
    }
}
Jop Knoppers
źródło
2

Wiele odpowiedzi tutaj i chciałbym dodać swój wkład. IE 11 był takim dupkiem w sprawie Flexboksa (zobacz wszystkie jego problemy i niespójności tutaj ), że naprawdę potrzebowałem łatwego sposobu, aby sprawdzić, czy użytkownik korzysta z dowolnej przeglądarki IE (do 11 włącznie), ale z wyłączeniem Edge, ponieważ Edge jest w rzeczywistości nieźle.

Na podstawie podanych tutaj odpowiedzi napisałem prostą funkcję zwracającą globalną zmienną boolowską, której można następnie użyć w dół linii. Bardzo łatwo jest sprawdzić 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!");
}

W ten sposób wystarczy wykonać wyszukiwanie tylko raz i zapisać wynik w zmiennej, zamiast pobierać wynik przy każdym wywołaniu funkcji. (O ile wiem, nie musisz nawet czekać na dokument gotowy do wykonania tego kodu, ponieważ klient użytkownika nie jest powiązany z DOM).

Bram Vanroy
źródło
2

Spróbuj tego, jeśli używasz wersji 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;
}

Jeśli używasz jQuery w wersji <1.9 ($ .browser został usunięty w jQuery 1.9), zamiast tego użyj następującego kodu:

$('.myClass').on('click', function (event) {
    if ($.browser.msie) {
        alert($.browser.version);
    }
});
Rohan Kumar
źródło
Dzięki za to. Niestety wciąż jesteśmy w wersji 1.7.2 i nie mogę tego jeszcze zmienić.
user2571510
O ile widzę, nie uwzględnia to nowszych IE, które są oparte na silniku Trident.
Bram Vanroy,
Zaktualizowano dla najnowszych IE opartych na Trident
Rohan Kumar
1

@ Rozwiązanie SpiderCode nie działa z IE 11. Oto najlepsze rozwiązanie, którego użyłem odtąd w moim kodzie, w którym potrzebuję wykrywania przeglądarki dla określonej funkcji.

IE11 nie zgłasza już jako MSIE, zgodnie z tą listą zmian, celowo jest unikać błędnego wykrywania.

Jeśli naprawdę chcesz wiedzieć, że to IE, możesz wykryć trójząb / ciąg znaków w kliencie użytkownika, jeśli navigator.appName zwraca Netscape, coś w rodzaju (niesprawdzone);

Dzięki tej odpowiedzi

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;
}
AnujKu
źródło
1

Poniżej znalazłem elegancki sposób na zrobienie tego podczas googlingu ---

/ 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;
}
Rameshwar Vyevhare
źródło
1
To jest dokładnie kod z mojego pióra w CodePen , który jest częścią mojej odpowiedzi na to pytanie . ;-)
Mario,
1
Tak, użyłem tego samego, ale ludzie z przepełnieniem stosu nie chcą udostępniać linku. zaktualizuje link w odniesieniu tutaj tutaj. Dzięki za świetną pracę Mario.
Rameshwar Vyevhare
1

Zaktualizuj odpowiedź SpiderCode, aby naprawić problemy, w których ciąg „MSIE” zwraca -1, ale pasuje do „Trident”. Kiedyś zwracał NAN, ale teraz zwraca 11 dla tej wersji 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;
       }
    }
JeremyS
źródło
0

Możesz wykryć wszystkie programy Internet Explorer (ostatnia testowana wersja 12).

<script>
    var $userAgent = '';
    if(/MSIE/i['test'](navigator['userAgent'])==true||/rv/i['test'](navigator['userAgent'])==true||/Edge/i['test'](navigator['userAgent'])==true){
       $userAgent='ie';
    } else {
       $userAgent='other';
    }

    alert($userAgent);
</script>

Zobacz tutaj https://jsfiddle.net/v7npeLwe/

Rogerio de Moraes
źródło
0
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');
}
}

Powinieneś zobaczyć wynik w konsoli, użyj chrome Inspect.

linjie
źródło
0

Umieściłem ten kod w funkcji gotowości dokumentu i uruchamia się on tylko w przeglądarce Internet Explorer. Testowane w Internet Explorerze 11.

var ua = window.navigator.userAgent;
ms_ie = /MSIE|Trident/.test(ua);
if ( ms_ie ) {
    //Do internet explorer exclusive behaviour here
}
Isaac Levi Felix Salinas
źródło
0

Działa to tylko poniżej wersji 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);

Murali Krishna
źródło
0

Funkcja JavaScript do wykrywania wersji przeglądarki Internet Explorer lub Edge

function ieVersion(uaString) {
  uaString = uaString || navigator.userAgent;
  var match = /\b(MSIE |Trident.*?rv:|Edge\/)(\d+)/.exec(uaString);
  if (match) return parseInt(match[2])
}
Shohel
źródło
0

Nekromancja.

Aby nie zależeć od ciągu klienta użytkownika, po prostu sprawdź kilka właściwości:

if (document.documentMode) 
{
    console.log('Hello Microsoft IE User!');
}

if (!document.documentMode && window.msWriteProfilerMark) {
    console.log('Hello Microsoft Edge User!');
}

if (document.documentMode || window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User!');
}

if (window.msWriteProfilerMark) 
{
    console.log('Hello Microsoft User in fewer characters!');
}

Wykrywa to również nową Chredge (Anaheim):

function isEdg()
{ 

    for (var i = 0, u="Microsoft", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

I to wykrywa chrom:

function isChromium()
{ 

    for (var i = 0, u="Chromium", l =u.length; i < navigator.plugins.length; i++)
    {
        if (navigator.plugins[i].name != null && navigator.plugins[i].name.substr(0, l) === u)
            return true;
    }

    return false;
}

A to Safari:

if(window.safari)
{
    console.log("Safari, yeah!");
}
Stefan Steiger
źródło
-1

Spróbuj zrobić tak

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

}
Deepak Kumar
źródło
jQuery wycofał to w 1.3 i całkowicie usunął w 1.9.
geca
-1

Myślę, że to pomoże Tutaj

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 = '<br /><div style="width:100%;text-align:center"><p style="color:red;font-weight:bold">Please use the browser below to use the tool</p>';
        html += '<img src="/Scripts/IPTVClearFeePackage_Box/Images/firefox.png"/>';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/chrome.png" />';
        html += ' <img src="/Scripts/IPTVClearFeePackage_Box/Images/opera.png" />';
        html += '<hr /><form><input type="button" class="btn btn-danger" value="Đóng trình duyệt" onclick="window.close()"></form><div>';
        windowBrowser.content(html);
        windowBrowser.open();

        $("#windowBrowser").parent().find(".k-window-titlebar").remove();
    }
    else  // If another browser, return 0
    {
        return false;
    }
}
AirBlack
źródło
-3

Możesz użyć $.browser aby uzyskać informacje o nazwie, dostawcy i wersji.

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

Roemer
źródło
7
„Ta właściwość została usunięta w jQuery 1.9 i jest dostępna tylko za pośrednictwem wtyczki jQuery.migrate.”
Reeno