2013-09-25 5 views
0

Я знаю, что IE11 изменил способ отправки navigator.userAgent, и я видел this response. Это хорошо работает, если все, что нам нужно, это IE11 и выше, но нам нужен IE9 и выше. Я где-то читал, что кодовое имя Trident было введено в IE9, но быстрый тест IE8 показывает, что пользовательский агент там также содержит Trident.Как я могу настроить IE9 и выше с помощью javascript?

Мое регулярное выражение не очень хорошее; как я могу разделить эти строки, чтобы определить, что находится между Trident/ и следующей точкой с запятой, чтобы я мог определить, с какой версией я имею дело? (Пожалуйста, не говорите мне, чтобы использовать функцию обнаружения вместо, что это не вариант здесь.)

IE 8:

"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BO1IE8_v1;ENUS)" 

IE 9:

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3)" 

Мой существующий код (который Безразлично «т поймать IE8) выглядит следующим образом:

if (navigator.userAgent.match(/Trident/)) { 
    // it's supported; do stuff 
} 

в принципе, я пытаюсь получить 5.0 из IE9 и 4.0 из IE8.

+0

В этом случае вам нужно будет получить подстроку строки пользовательского агента. Почему бы просто не использовать условные HTML-теги? – Sethen

+0

Кроме того, имейте в виду, что строки пользовательского агента для поиска определенных версий браузеров не так надежно. Строки пользовательского агента можно легко подделать. – Sethen

+0

Это интегрировано в CMS, что исключает возможность добавления таких вещей. – EmmyS

ответ

1

Мое регулярное выражение не очень хорошее; как я могу разделить эти строки, чтобы определить, что находится между Trident/и следующей точкой с запятой, чтобы я мог определить, с какой версией я имею дело?

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

var stringAfterTrident = navigator.userAgent.match(/Trident([^;]+);/)[1]; 
//should return ["Trident/5.0;", "/5.0"] and you want the second item of the array 

/Trident([^;]+);/ в основном говорит начинается с Trident, захватить один или более символов, который не является точкой с запятой до тех пор, пока не будет точкой с запятой.

+0

Спасибо. Я думаю, это то, что я ищу. – EmmyS

+0

@EmmyS Нет проблем. Пожалуйста, примите ответ. знак равно – kenttam

Смежные вопросы