Как я могу настроить таргетинг только на Internet Explorer 11 с помощью JavaScript?

Какой способ настроить таргетинг только на IE11 с помощью JavaScript наименее подвержен ошибкам?

Примечание. На самом деле это следует делать только для аналитики или информирования пользователя о том, какой браузер он использует. Для всего остального есть функция обнаружения.


person dave1010    schedule 03.07.2013    source источник
comment
Поиск пользовательского агента IE11 даст вам сообщения в блоге, и эту статью все видели: nczonline.net/blog/2013/07/02/   -  person Denys Séguret    schedule 03.07.2013
comment
@dystroy, в этом сообщении в блоге, похоже, нет кода обнаружения. Даже несмотря на то, что у него есть (текущий) UA IE11, многие люди не знают, как его протестировать.   -  person dave1010    schedule 03.07.2013
comment
Для справки, вот тот же вопрос об IE10: stackoverflow.com/questions/9900311/   -  person dave1010    schedule 03.07.2013
comment
IE11 имеет несколько строк пользовательского агента: blogs.msdn.com/b/ieinternals/archive/2013/09/21/   -  person EricLaw    schedule 26.09.2013
comment
Я хотел бы знать, в чем заключалась ошибка. :)   -  person jcreamer898    schedule 17.09.2014
comment
Повторное открытие - по какой-то причине все голоса за повторное открытие этого вопроса в прошлом в конечном итоге устарели, и было много этих повторных голосований. Излишне говорить, что люди, оставившие эти резкие комментарии, были частью проблемы, предпочитая жаловаться, а не делать что-либо, чтобы попытаться снова открыть вопрос. В будущем, если ваш вопрос не будет повторно открыт, несмотря на все ваши усилия по привлечению к нему внимания сообщества, и вы твердо хотите, чтобы его снова открыли, не стесняйтесь отмечать его для внимания модератора, объяснять свое дело, и мы Смотреть.   -  person BoltClock    schedule 22.04.2015


Ответы (7)


Строка User-agent для IE 11 в настоящее время следующая:

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

Пример Windows 10:

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

Это означает, что вы можете просто протестировать версии 11.xx,

var isIE11 = /Trident.*rv[ :]*11\./.test(navigator.userAgent);

Как пользовательский агент IE10 был

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

вероятно также безопасно сделать ставку на то, что теперь Trident/X должно быть реальным управлением версиями.

person Community    schedule 03.07.2013
comment
трезубец относится к версии MSHTML, rv - это версия IE - person Paul Zahra; 16.11.2013
comment
Я использую IE виртуально через modern.ie, а в IE 11.0.9600.x на самом деле между rv и номером версии есть двоеточие, а не пробел: Mozilla/5.0 (Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; rv:11.0) like Gecko Пришлось переключиться на это регулярное выражение: !!navigator.userAgent.match(/Trident.*rv[ :]?11\./) - person Kevin Jurkowski; 11.12.2013
comment
При победе 7 IE 11 выдает как false. - person Gopi; 30.12.2013
comment
@TechJerk Что такое navigator.userAgent? - person Denys Séguret; 30.12.2013
comment
Mozilla / 5.0 (Windows NT6.1; WOW64; Trident / 7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30279; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0.0c ;. NET4.0E; Infopath.2; rv: 11.0) как Gecko - person Gopi; 30.12.2013
comment
Я изменил в соответствии с комментарием @KevinJurkowski, и это сработало! Спасибо! - person Gopi; 30.12.2013
comment
Как мне проверить, есть ли IE11 и выше? Это сработает? !!navigator.userAgent.match(/Trident.*rv[ :]?[1-9]{2}\./) Регулярное выражение - не моя сильная сторона, но я использую его из соображений совместимости и хочу, чтобы код выполнялся внутри моего оператора if, если это тоже IE12, IE13 и т. Д. - person LeigerGaming; 11.02.2014
comment
ПРИМЕЧАНИЕ: это не будет работать для IE11 для настольных компьютеров в 64-битной версии Windows 8.1 с обновлением с включенным представлением совместимости. см. msdn.microsoft.com/en -us / library / ie / hh869301% 28v = vs.85% 29.aspx - person Don; 11.07.2014
comment
Что значит !! пожалуйста? - person Steffi; 07.10.2015
comment
@Steffi !! изменяет null на false, а любой массив - на true. Но есть более чистое решение, я отредактирую. - person Denys Séguret; 08.10.2015
comment
Разве это не должно быть /Trident.*rv[ :]*11\./.test(navigator.userAgent)? - person l.poellabauer; 13.10.2016

IE11 сохраняет «Trident» в строке UA, но отбрасывает MSIE. Простой способ определить браузер - IE11 или выше (IE12, IE13 и т. Д.):

var isAtLeastIE11 = !!(navigator.userAgent.match(/Trident/) && !navigator.userAgent.match(/MSIE/));

Если вам нужен только IE11 (и вы не хотите, чтобы будущие версии IE совпадали), сделайте следующее:

var isIE11 = !!(navigator.userAgent.match(/Trident/) && navigator.userAgent.match(/rv[ :]11/));
person dave1010    schedule 03.07.2013
comment
ревизия разделяется двоеточием, так что это не rv: 11 - person Code Uniquely; 22.07.2015
comment
Спасибо. Похоже, MS это изменила. Я обновил регулярное выражение. - person dave1010; 03.08.2015

var isIE11 = !!navigator.userAgent.match(/Trident\/7.0; rv 11/);

Источник: http://www.nczonline.net/blog/2013/07/02/internet-explorer-11-dont-call-me-ie/

person Florian Margaine    schedule 03.07.2013
comment
При победе 7 IE 11 выдает как false. - person Gopi; 30.12.2013
comment
Для меня это тоже неверно в IE 11 - person Robert; 10.02.2014
comment
это может быть из-за точки, которую в регулярном выражении нужно экранировать. - person user776686; 01.03.2018

Это установит ie на версию IE или 0, если нет. Он будет работать с 1 по 11, но может не обнаруживать будущие версии, если Microsoft откажется от движка Trident.

var ie = 0;
try { ie = navigator.userAgent.match( /(MSIE |Trident.*rv[ :])([0-9]+)/ )[ 2 ]; }
catch(e){}

Вас также может заинтересовать мой связанный более подробный ответ здесь.

person Beejor    schedule 18.06.2015
comment
Это лучший сценарий для меня. Он нацелен на все версии IE. Он не нацелен на Edge, который мне все равно не нужен. :) Спасибо @Beejor! - person cbloss793; 16.09.2017

Я использую следующий шаблон для таргетинга на все браузеры IE. Вы можете сократить его, если вам нужен только IE 11.

 /msie|trident|edge/g.test(navigator.userAgent.toLowerCase());

Удачи!

Фредрик

person Fredrik Borggren    schedule 02.12.2015

Вот сценарий, который вы можете использовать для обнаружения любого браузера:

<script>

  // Opera
  var isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;

  // Firefox 1.0+
  var isFirefox = typeof InstallTrigger !== 'undefined';

  // Safari 3.0+ "[object HTMLElementConstructor]" 
  var isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);

  // Internet Explorer 6-11
  var isIE = /*@cc_on!@*/false || !!document.documentMode;

  // Edge 20+
  var isEdge = !isIE && !!window.StyleMedia;

  // Chrome 1+
  var isChrome = !!window.chrome && !!window.chrome.webstore;

  // Blink engine detection
  var isBlink = (isChrome || isOpera) && !!window.CSS;

  if (isFirefox==true) {
    alert(isFirefox)
    $('.container-fluid').css({"overflow-y":"auto","height":"150%"});  
  }

</script>
person baisakhi chauhan    schedule 23.08.2018

Попробуй это,

navigator.sayswho= (function(){
   var N= navigator.appName, ua= navigator.userAgent, tem;
   var M= ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
   if(M && (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
   M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];
   return M;
})();

Источник из Обнаружения браузера в JavaScript?

Обновлено для IE = 11

Использовать этот

var isIE11 = navigator.userAgent.match(/Trident\/7.0; rv 11.0/);

Прочтите этот http://msdn.microsoft.com/en-us/library/ie/bg182625%28v=vs.85%29.aspx

person Rohan Kumar    schedule 03.07.2013