Что это значит, когда IE сообщает о двух версиях в UserAgent? - PullRequest
9 голосов
/ 12 августа 2010

Я наблюдаю случаи, когда строка userragent в IE состоит из нескольких частей, сообщающих о разных версиях. Например:

   Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; 
   {B93AEBFF-7B72-44EA-B006-8CB078CC1911}; 
   Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; 
   .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; 
   .NET CLR 3.5.30729)

Так что это MSIE 8.0, но также и MSIE 6.0. Значит ли это что-то особенное? Это стандартный IE или есть что-то особенное?

Я спрашиваю, потому что я вижу странное поведение с браузером, который сообщает о нескольких версиях, но не с другим IE8.0, который требует одну версию:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; 
Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; 
.NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)

Не уверен, имеет ли к этому отношение пользователь-агент, но я решил спросить.

[Обновить] Обратите внимание, что я не пишу код для определенных версий браузера, я просто заметил это как разницу между браузером, который вел себя странно, и тем, который не был. Я хотел знать, что заставило бы некоторые IE8.0 сообщать, что они также IE6.0, другие нет.

Ответы [ 3 ]

6 голосов
/ 12 августа 2010

Ответ Лу правильный, но я его расширю.

Строки агента пользователя доступны для кода JavaScript, выполняемого на веб-странице.К сожалению, среди веб-разработчиков довольно распространенная (и плохая) практика проверять строку пользовательского агента для выполнения специфических для браузера улучшений или обходных путей.

Когда появились новые браузеры с обновленными возможностями, их разработчики осознали, что многие веб-сайтыне работал в них или работал ухудшенным способом, потому что проверки пользовательского агента были выполнены неправильно и приняли неправильные пути в коде.Это привело к тому, что разработчики браузеров изменили строки своих пользовательских агентов так, чтобы был выбран правильный путь.Это привело к текущей ситуации, когда каждый браузер притворяется Mozilla, и в целом строки пользовательских агентов являются довольно беспорядочными.

Поэтому вполне возможно, что веб-сайт, который вы видите, ведет себя плохо, выполняет проверку пользовательского агента, а не выполняет ееправо.Как сказал Лу, код JavaScript не должен пытаться анализировать пользовательский агент (что является очень хрупким способом тестирования браузера и, скорее всего, порвет с будущими версиями браузера), а должен проверять возможности браузера.Текущая популярная библиотека JavaScript (например, jQuery) делает это правильно (еще одна причина использовать их), но все же бывает, что пользовательский код JavaScript будет пытаться использовать строку агента пользователя.

1 голос
/ 12 августа 2010

Версия 6.0 фактически находится в скобках версии 8.0. (Конечно, ни один из них на самом деле недействителен в соответствии с грамматикой HTTP, но в наши дни никто не воспринимает это как структурированную строку.)

Это сообщение является единственным результатом B93AEBFF-7B72-44EA-B006-8CB078CC1911, что является подозрительным.

1 голос
/ 12 августа 2010

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

Никогда не кодируйте в строку user-agent, код для возможностей:

http://kangax.github.io/cft/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...