JavaScript: лучший способ обнаружить IE - PullRequest
4 голосов
/ 07 октября 2011

Чтение эта статья Я нашел следующий фрагмент кода:

if ('v'=='\v') { // Note: IE listens on document
    document.attachEvent('onstorage', onStorage, false);
}

Является ли этот метод 'v'=='\v' отличной идеей?Это самый короткий способ обнаружить IE?

Ответы [ 3 ]

10 голосов
/ 07 октября 2011

Если вы можете избежать этого, не проверяйте браузеры.Сделайте функцию обнаружения.Это будет означать, что ваш код (с большей вероятностью) рассчитан на будущее.В этом случае, например, если вы обнаружили, что браузер был IE и решили использовать attachEvent из-за него, вы упустили бы тот факт, что addEventListener (улучшенный) доступен в IE9.

В этом случае проверьте, существует ли document.addEventListener.Если да, у вас есть ответ.

if (document.addEventListener) {
    document.addEventListener(...);
} else {
    document.attachEvent(...);
}

Редактировать: приведенный выше комментарий Дури показывает, что этот тест не проходит в IE9 (согласно стандартам), что фактически означает, что это идеальный тест для addEventListener, так как это доступно из IE9. Однако все еще гораздо лучше программировать для определенных функций, чем для конкретных браузеров.

9 голосов
/ 07 октября 2011

Вы можете проверить Trident, движок IE, следующим образом:

var trident = !!window.ActiveXObject;

Как указано в MSDN , оно поддерживается только в IE.

Редактировать:

Примечание: приведенный выше код возвращает false в IE-11. Если вы хотите обнаружить также IE-11, используйте это:

var isIE = "ActiveXObject" in window; //window.ActiveXObject !== undefined;
6 голосов
/ 25 ноября 2013

Чтобы проверить, является ли браузер Internet Explorer, используйте функцию обнаружения для проверки documentMode:

http://msdn.microsoft.com/en-us/library/ie/cc196988%28v=vs.85%29.aspx

Этот код проверяет, является ли браузер Internet Explorer 8,9, 10 или 11:

var docMode = document.documentMode,
    hasDocumentMode = (docMode !== undefined), 
    isIE8 = (docMode === 8),
    isIE9 = (docMode === 9),
    isIE10 = (docMode === 10),
    isIE11 = (docMode === 11),
    isMsEdge = window.navigator.userAgent.indexOf("Edge/") > -1;

// browser is IE
if(hasDocumentMode) {
     if(isIE11){
         // browser is IE11
     } else if(isIE10){
         // browser is IE10
     } else if(isIE9){
         // browser is IE9
     } else if(isIE8){
         // browser is IE8
     }
} else {
   // document.documentMode is deprecated in MS Edge
   if(isMsEdge){
         // browser is MS Edge
   }
}

Проверка document.documentMode будет работать только в IE8 через IE11, поскольку documentMode был добавлен в IE8 и устарел / удален в MS Edge.

http://msdn.microsoft.com/en-us/library/ff406036%28v=vs.85%29.aspx

Надеюсь, это поможет!

ОБНОВЛЕНИЕ

Если вам действительно нужно обнаружить IE7, проверьте наличие document.attachEvent:

var isIE7 = (document.attachEvent !== undefined);
if(isIE7) {
      // browser is IE7
}

IE7 возвращает объект, но если браузер IE11 (например), тогда он вернется как undefined, так как IE11 не имеет attachEvent.

ОБНОВЛЕНИЕ:

Добавлена ​​проверка для MS Edge.document.documentMode было устарело в MS Edge .Из-за особенностей MS Edge вы можете проверить наличие Edge/ в User Agent.Microsoft затрудняет использование функции обнаружения в MS Edge.

...