Перевірте, чи користувач використовує IE


390

Я викликаю функцію, подібну до наведеної нижче, натисканням на divs з певним класом.

Чи є спосіб я перевірити при запуску функції, чи користувач використовує Internet Explorer і скасовує / скасовує його, якщо він використовує інші браузери, щоб він працював лише для користувачів IE? Користувачі тут були б на IE8 або новіших версіях, тому мені не потрібно було б охоплювати IE7 та нижчі версії.

Якби я міг сказати, який браузер вони використовують, це було б чудово, але це не потрібно.

Приклад функції:

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

1
Використовуйте модернізатор для виявлення IE або інших браузерів. stackoverflow.com/questions/13478303/…
chris

7
За сучасними стандартами розробки веб-сторінок, для старих версій IE для початку слід розробити погану практику.
Россен

7
Насправді, ця «погана практика» вимушена самими стандартами, тому це не вина розробника ... Браузери працюють по-різному, і технічні характеристики надто м'які в питаннях впровадження. Для того, щоб зробити щось, що не баггі і не нудно, як пекло , потрібно виявити браузер. Я хотів би запропонувати іншу кращу практику: With modern web development, it's bad practice to support non-Chromium-based browsers (with Safari not considered to be Chromium-based at all). Вибачте, але це божевілля має закінчитися в якийсь момент і якось ...
user2173353

2
Сьогодні краще практикувати "виявлення функції" над "виявленням браузера". Запитайте, чи працює браузер те, що вам потрібно.
Кріс Роджерс

2
@Chris - вибачення ... мав на увазі, щоб мати більше жартівливого тону. Я буду звинувачувати IE в тому, що вкрав мою радість і залишив мене гіркотою і розчаруванням. :)
JDB досі пам’ятає Моніку

Відповіді:


477

Використовуйте нижче метод 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;
}

Подробиці ви можете знайти на веб-сайті підтримки Microsoft нижче:

Як визначити версію браузера зі скрипту

Оновлення: (підтримка 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;
}

27
хоча це буде добре працювати, тому що змінна ua ніколи не почнеться з MSIE, написання if (msie > 0)є оманливим. Якщо значення не знайдено, функція indexOf () повертає -1 не 0. Отже, if (msie > -1)було б більш пояснювальним.
Neville Nazerane

61
Це повертає NaN в IE11, для мене.
verism

7
@verism і інші: перевірити цю відповідь , який також працює на IE 11: stackoverflow.com/a/21712356/114029
Leniel Маккаферрі

8
navigator.userAgent.indexOf ("MSIE")> 0 || navigator.userAgent.indexOf ("Тризуб")> 0 || navigator.userAgent.indexOf ("Edge")> 0
tylermauthe

12
/Edge\/|Trident\/|MSIE /.test(window.navigator.userAgent)Я знаю, що це працює в 10 і 11. Якщо ви можете перевірити <IE9 і Edge, відредагуйте відповідь.
Індолінг

595

Через кілька років браузер Edge використовує Chromium в якості двигуна візуалізації.
На жаль, перевірка IE 11 - це все ще річ.

Ось більш простий підхід, оскільки старі версії IE повинні бути відсутніми.

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

Ось моя стара відповідь (2014):

В Edge рядок користувача-агента змінився.

/**
 * 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;
}

Використання зразка:

alert('IEEdge ' + detectIEEdge());

Рядок за замовчуванням IE 10:

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

Рядок за замовчуванням IE 11:

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

Рядок 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 

Рядок за замовчуванням 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 

Рядок за замовчуванням 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 

Рядок за замовчуванням з краю 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 

Рядок за замовчуванням 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 

Рядок 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 

Рядок за замовчуванням Edge 18 (Insider preview):

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 

Тест у CodePen:

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


4
Дякую за коментар. Я ще не підтвердив вашу відповідь, але хочу прокоментувати одне: Оскільки перше "якщо" містить "повернення", вам не потрібно "ще" після цього.
Маріо

30
Цікаво, чому, до біса, вони змінюють рядок агентів користувачів у нових версіях IE? MS серйозно не хочуть, щоб ми виявили їх жахливий веб-браузер.
c00000fd

3
@SameerAlibhai Теоретично добре звучить, але на практиці, особливо зараз, це не практично. Іноді виникають проблеми, що одне виявлення "функції" не охоплює, а крім того, певні функції мають вигадки щодо впровадження, які можна вирішити лише зі знанням браузера. Що робити, якщо я хочу зробити щось просте, наприклад збирати статистику браузера?
Невеликий

34
Слід зазначити, що Edge насправді не "IE12", але насправді є повністю окремим браузером. У Windows 10 поставлено IE11 та Edge.
молоко

16
моя ненависть до IE зростає
Колобський каньйон

135

Якщо ви хочете знати, чи є браузер IE чи ні, ви можете зробити це:

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
}

Оновлення 1: Кращий метод

Я рекомендую це зараз. Він все ще дуже читабельний і набагато менше коду :)

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

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

Дякую ДжонніФун у коментарях за скорочену відповідь :)

Оновлення 2: Тестування IE в CSS

По-перше, якщо ви можете, слід використовувати @supportsоператори замість JS для перевірки, чи підтримує браузер певну функцію CSS.

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

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

(Зверніть увагу, що IE взагалі не підтримує @supportsі буде ігнорувати будь-які стилі, розміщені всередині @supportsоператора.)

Якщо проблему неможливо вирішити, @supportsви можете зробити це:

// 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 */
}

(Примітка: classListпорівняно нове для JS, і я думаю, що з браузерів IE він працює лише в IE11. Можливо, також IE10.)

Якщо ви використовуєте SCSS (Sass) у своєму проекті, це можна спростити до:

/* SCSS (Sass) */

.element {
  /* styles that apply everywhere */

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

Оновлення 3: Додавання Microsoft Edge (не рекомендується)

Якщо ви також хочете додати Microsoft Edge до списку, ви можете зробити наступне. Однак я не рекомендую це, оскільки Edge є набагато грамотнішим браузером, ніж IE.

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

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

5
Або те саме в декількох байтах: ms_ie = ~ ua.indexOf ('MSIE') || ~ ua.indexOf ('Тризуб /'); ;-)
Саймон Штейнбергер

12
Моя версія має набагато більш безпосередній сенс, хоч для людини, але менше байтів завжди добре :)
Даніель Тонон

7
абоms_ie = !!ua.match(/MSIE|Trident/)
xori

5
або ms_ie = /MSIE|Trident/.test(ua)
JohnnyFun

1
@SimonSteinberger ~має якесь значення?
1,21 гігаватт

45

Це повертається trueдля будь-якої версії Internet Explorer:

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

userAgentПараметр є необов'язковим , і він по замовчуванням агента користувача браузера.


Це повинно бути добре, але ви просто забули встановити для браузерів IE за замовчуванням значення "return true" або "return 1". Наразі це не повертає жодного значення під час виявлення браузерів IE.
Вінсент Едвард Гедарія Бінуа

10
Чому ви хочете ставитися до Edge як до IE? Щодо сумісності, то вони мають мало спільного сьогодні.
minexew

@docta_faustus userAgent - це параметр, а не глобальний
bendytree

29

Ось як це робить команда 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;

Потім є кілька рядків коду, розпорошених по всьому, використовуючи його як число, наприклад

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

і

if (enabled && msie < 8) {

window.document.documentMode не визначено в MS Edge
Веселін Василев

25
це не визначено в MS Edge, оскільки MS Edge не IE!
JCKödel

1
document.documentModeпідтримується IE8 +. Це буде 'undefined'для Edge або Chrome / FireFox .... Я змінив цей код var IEver = window.document.documentMode || (window.attachEvent? 1 : 99);таким чином, що він повертає точну версію IE для IE8 +, 99 для не-IE-браузерів (зазвичай це буде сучасний браузер) і 1 для старого IE5-7. Це написано таким чином, оскільки нам зазвичай потрібна спеціальна робота лише для деяких старших ІЕ. Отже, if (IEver < 9) { ... }означає, якщо це старий IE
S.Serpooshan

29

Ви можете використовувати об’єкт навігатора для виявлення користувача-навігатора, для нього вам не потрібен 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


4
Це дає мені хибність для мого IE11
Кертіс,

2
Користувацький агент IE11 відрізняється від MSIE (XX); IE11 можна було б знайти, перевіривши на тризуб.
Орфей

Це дає хибний позитив у Firefox 45.0.2.
Тім С. Ван Харен

неправильний тестовий індексOf не повертає істинне або хибне, як тестувальну функцію regex, у вас є navigator.userAgent.indexOf ("Тризуб /")! = -1
Дахар Юссеф

10

Використовуючи відповіді вище; простий і стислий бульовий повернення:

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


1
Повертає помилку в FireFox 44.0.2 на Widnows 10. Яка версія FireFox повертає true @ SiKni8?
Артур Геберт

9

Метод 01:
$ .browser був застарілий у версії 1.3 jQuery та видалений у 1.9

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

Спосіб 02:
Використання умовних коментарів

<!--[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]>

Спосіб 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 );
}

Спосіб 04:
Використовуйте JavaScript / Ручне виявлення

/*
     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);
     }

 }());

Довідкова посилання


@radhe Я оновив відповідь, сподіваюся, це буде працювати для вас.
Аамір Шахзад

Як зауваження: Спосіб 2 не працюватиме в IE10 або краще в стандартному режимі. Для отримання додаткової інформації: Умовні коментарі більше не підтримуються
вставтекористувач тут

@insertusername, ви дуже праві, тому я думаю, що використання .ie10класу - один з найкращих варіантів, якщо ви робите деякі виправлення css лише для ie10. Оскільки Інтернет-дослідник 10 додає ".ie10"клас до елемента HTML <html class="ie10">, ви можете використовувати його на зразок.ie10 .myclass {//some css here}
Аамір Шахзад

8

Я просто хотів перевірити, чи був браузер IE11 чи старший, тому що вони лайно.

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

2
це отримує мій голос за високу повагу щодо іменування стандартів конвенції
redbandit

7
function detectIE() {
    var ua = window.navigator.userAgent;
    var ie = ua.search(/(MSIE|Trident|Edge)/);

    return ie > -1;
}

Не відповідає на запитання. Край не IE.
hda

hda, питання датоване 2013 роком, я думаю, що сьогодні цікаво не ігнорувати "Edge"
Boss COTIGA

5

Використання модернізатора

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

Не відповідає на питання, оскільки Edge не є IE. Також Edge не є IE12. Після виходу Edge на основі хрому ви також повинні додати Chrome або Opera до цього списку. (Що б ви хотіли досягти цього, було б легше виявити Firefox)
hda

5

Або ця справді коротка версія повертає справжнє значення, якщо браузерами є Internet Explorer:

function isIe() {
    return window.navigator.userAgent.indexOf("MSIE ") > 0
        || !!navigator.userAgent.match(/Trident.*rv\:11\./);
}

4

Ще одна проста (але зрозуміла для людини) функція виявити, чи є браузер IE чи ні (ігноруючи Edge, що зовсім не погано):

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

3

Якщо ви не хочете використовувати Useragent, ви також можете це зробити для перевірки того, чи є браузер IE. Коментований код фактично працює в браузерах IE і перетворює "false" на "true".

var isIE = /*@cc_on!@*/false;
if(isIE){
    //The browser is IE.
}else{
    //The browser is NOT IE.
}   

1
IE11 не підтримує умовну компіляцію
Габріель Ллама

Я просто спробував це, і воно все одно спрацювало. Ви впевнені, що це не підтримує?
dev4life

3

Я знаю, що це старе питання, але у випадку, якщо хтось знову зустріне його і має проблеми з виявленням IE11, ось робоче рішення для всіх поточних версій IE.

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

3

я цим користувався

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

2

Тут багато відповідей, і я хотів би додати свій внесок. IE 11 був такою дупою щодо флексокса (дивіться всі його проблеми та невідповідності тут ), що мені дійсно потрібен був простий спосіб перевірити, чи користувач використовує будь-який браузер IE (до 11 включаючи), але виключаючи Edge, адже Edge насправді дуже приємно.

На основі наведених тут відповідей я написав просту функцію, повертаючи глобальну булеву змінну, яку потім можна використовувати вниз по лінії. Це дуже легко перевірити на 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!");
}

Таким чином, вам потрібно виконати пошук лише один раз, і ви зберігаєте результат у змінній, а не отримувати результат при кожному виклику функції. (Наскільки я знаю, вам навіть не потрібно чекати документа, готового виконати цей код, оскільки агент-користувач не пов’язаний з DOM.)


2

Спробуйте це, якщо ви використовуєте версію 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;
}

Якщо використовується версія jQuery <1.9 ($ .browser видалено у jQuery 1.9), замість цього використовуйте наступний код:

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

Дякую за це На жаль, ми все ще перебуваємо на версії 1.7.2 і не можемо це змінити.
користувач2571510

Наскільки я бачу, це не враховує новіші IE, які базуються на двигуні Trident.
Брем Ванрой

Оновлено найсвіжіші ІЕ на основі тризуба
Рохан Кумар

1

@ Рішення SpiderCode не працює з IE 11. Ось найкраще рішення, яке я відтепер використовував у своєму коді, де мені потрібне виявлення браузера для певної функції.

IE11 більше не звітує як MSIE, згідно з цим переліком змін, навмисно уникати неправильного виявлення.

Що ви можете зробити, якщо ви дійсно хочете знати, що це IE - це виявити Trident / string в агенті користувача, якщо navigator.appName повертає Netscape, щось на зразок (неперевірене);

Завдяки цій відповіді

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

1

Нижче я знайшов елегантний спосіб зробити це під час гуглінга ---

/ 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;
}

1
Це саме код з мого пера на CodePen , який є частиною моєї відповіді на це питання . ;-)
Маріо

1
Так, я використовував те саме, але люди, які переповнюють стек, не хочуть ділитися посиланням. буде оновлено посилання тут, далі. Дякую за велику роботу Маріо.
Рамешвар Виєхаре

1

Оновіть відповідь SpiderCode, щоб виправити проблеми, коли рядок "MSIE" повертається -1, але відповідає "Trident". Він раніше повертав NAN, але тепер повертає 11 для цієї версії 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;
       }
    }

0

Ви можете виявити всі Internet Explorer (остання перевірена версія 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>

Дивіться тут https://jsfiddle.net/v7npeLwe/


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

Ви повинні побачити результат на консолі, будь ласка, використовуйте хром Inspect.


0

Я помістив цей код у функцію готового до документа, і він спрацьовує лише в Internet Explorer. Тестовано в Internet Explorer 11.

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

0

Це лише робота нижче версії 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);


0

Функція JavaScript для виявлення версії Internet Explorer або Edge

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

0

Некромантування.

Щоб не залежати від рядка користувача-агента, просто перевірте кілька властивостей:

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!');
}

Крім того, це виявляє новий Chredge (Анахайм):

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

І це виявляє хром:

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

І це сафарі:

if(window.safari)
{
    console.log("Safari, yeah!");
}

-1

Спробуйте зробити так

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

}

jQuery знецінив це в 1.3 та повністю видалив у 1.9.
geca

-1

Я думаю, що це вам тут допоможе

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

-3

Ви можете використовувати $.browserдля отримання імені, продавця та інформації про версію.

Дивіться http://api.jquery.com/jQuery.browser/


7
"Цю властивість було видалено у jQuery 1.9 та доступно лише через плагін jQuery.migrate."
Reeno
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.