Проверьте, использует ли пользователь IE

391

Я вызываю функцию, подобную приведенной ниже, нажимая на div с определенным классом.

Можно ли при запуске функции проверить, использует ли пользователь Internet Explorer, и отменить / отменить его, если они используют другие браузеры, чтобы он работал только для пользователей IE? Все пользователи здесь будут на IE8 или более поздних версиях, поэтому мне не нужно было бы освещать IE7 и более ранние версии.

Если бы я мог сказать, какой браузер они используют, это было бы здорово, но это не обязательно.

Пример функции:

$('.myClass').on('click', function(event)
{
    // my function
});
user2571510
источник
1
Используйте модернизатор для обнаружения IE или других браузеров. stackoverflow.com/questions/13478303/…
Крис
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;
}
SpiderCode
источник
27
хотя это будет хорошо работать, поскольку переменная ua никогда не будет начинаться с MSIE, запись if (msie > 0)вводит в заблуждение. Если значение не найдено, функция indexOf () возвращает -1, а не 0. Следовательно, if (msie > -1)это будет более объяснительным.
Невилл Назиран,
61
Это возвращает NaN в IE11, для меня.
веризм
7
@verism и другие: проверьте этот ответ, который также работает для IE 11: stackoverflow.com/a/21712356/114029
Лениэль Маккаферри
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)Я знаю, что это работает на 10 и 11. Если вы можете проверить <IE9 и Edge, отредактируйте ответ.
помещении
595

Спустя несколько лет браузер Edge теперь использует Chromium в качестве движка рендеринга.
К сожалению, проверка на IE 11 все еще вещь.

Вот более простой подход, поскольку древние версии IE должны исчезнуть.

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

Вот мой старый ответ (2014):

В Edge строка User Agent изменилась.

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

Строка по умолчанию 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 

Строка по умолчанию 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 

Строка по умолчанию 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 

Строка по умолчанию 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 

Строка по умолчанию 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 

Строка по умолчанию Edge 18 (предварительный просмотр Insider):

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
}

Спасибо JohnnyFun в комментариях за укороченный ответ :)

Обновление 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 ( 'Trident /'); ;-)
Саймон Стейнбергер
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Параметр является необязательным , и он по умолчанию агента пользователя браузера.

bendytree
источник
Это должно быть хорошо, но вы просто забыли установить значение по умолчанию «return true» или «return 1» для браузеров IE. Это в настоящее время не возвращает никакого значения при обнаружении браузеров 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) {
ThisClark
источник
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. Это написано так, потому что мы обычно нуждаемся в специальной работе только для некоторых старых IE. Итак, 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 будет найден путем проверки Trident.
Орфей
Это дает ложный положительный результат в Firefox 45.0.2.
Тим С. Ван Харен
неправильный тест indexOf не возвращает истину или ложь, как регулярное выражение тестовой функции у вас есть navigator.userAgent.indexOf ("Trident /")! = -1
Дахар Юсеф
10

Используя ответы выше; простое и сжатое возвращаемое логическое значение:

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

gdibble
источник
1
Возвращает false в FireFox 44.0.2 на Widnows 10. Какая версия FireFox возвращает true @ SiKni8?
Артур Хеберт
9

Метод 01:
$ .browser устарел в jQuery версии 1.3 и удален в 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 здесь
@insertusername здесь вы очень правы, для этого я думаю, что использование .ie10класса является одним из лучших вариантов, если вы делаете некоторые исправления CSS только для ie10. Так как Internet Explorer 10 добавляет ".ie10"класс к элементу HTML <html class="ie10">, вы можете использовать его как.ie10 .myclass {//some css here}
Aamir Shahzad
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);}
Bill_VA
источник
2
это получает мой голос за его высокое уважение к стандартам соглашения об именах
redbandit
7
function detectIE() {
    var ua = window.navigator.userAgent;
    var ie = ua.search(/(MSIE|Trident|Edge)/);

    return ie > -1;
}
headione
источник
Не отвечает на вопрос. Край это не IE.
HDA
хда, вопрос датируется 2013 годом, думаю, что сегодня интересно не игнорировать «Край»
Босс КОТИГА
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;
});
kevnk
источник
Не отвечает на вопрос, так как Edge не IE. Также Edge не является IE12. Когда выйдет Chrome на основе Edge, вы также должны добавить Chrome или Opera в этот список. (Чего бы вы ни хотели достичь, тогда было бы легче обнаружить Firefox)
hda
5

Или эта действительно короткая версия возвращает true, если браузер Internet Explorer:

function isIe() {
    return window.navigator.userAgent.indexOf("MSIE ") > 0
        || !!navigator.userAgent.match(/Trident.*rv\:11\./);
}
Floris
источник
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 и превращает «ложь» в «истину».

var isIE = /*@cc_on!@*/false;
if(isIE){
    //The browser is IE.
}else{
    //The browser is NOT IE.
}   
dev4life
источник
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 был такой задницей относительно flexbox (см. Все его проблемы и несоответствия здесь ), что мне действительно нужен был простой способ проверить, использует ли пользователь какой-либо браузер 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 и пока не можем это изменить.
user2571510
Насколько я вижу, это не принимает во внимание более новые IE, основанные на движке Trident.
Брэм Ванрой
Обновлено для последних IE, основанных на Trident
Рохан Кумар
1

Решение @ SpiderCode не работает с IE 11. Вот лучшее решение, которое я использовал впредь в своем коде, где мне нужно обнаружение браузера для определенной функции.

IE11 больше не сообщает как MSIE, согласно этому списку изменений, намеренно, чтобы избежать неправильного обнаружения.

Если вы действительно хотите знать, что это IE, вы можете обнаружить Trident / строку в пользовательском агенте, если 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;
}
AnujKu
источник
1

Ниже я нашел элегантный способ сделать это во время поиска в 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;
}
Рамешвар Веххаре
источник
1
Это именно тот код , который написан моей ручкой в ​​CodePen и является частью моего ответа на этот вопрос . ;-)
Mario
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;
       }
    }
JeremyS
источник
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');
}
}

Вы должны увидеть результат в консоли, пожалуйста, используйте Chrome Inspect.

linjie
источник
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])
}
Shohel
источник
0

Necromancing.

Чтобы не зависеть от строки user-agent, просто проверьте несколько свойств:

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;
    }
}
AirBlack
источник
-3

Вы можете использовать, $.browserчтобы получить имя, поставщика и информацию о версии.

Смотрите http://api.jquery.com/jQuery.browser/

Ремер
источник
7
"Это свойство было удалено в jQuery 1.9 и доступно только через плагин jQuery.migrate."
Reeno