Можно ли обнаружить, что IE находится в режиме совместимости с useragent с PHP ?
Я использую IE10 и имею пользовательскийагент
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.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)
Таким образом, он появляется как Internet Explorer 7.
Конечно, было бы плохой идеей полагаться только на такое обнаружение PHP, но это очень полезно для некоторых ocasions (например, регистрация с помощью PHP или отладочных подсказок, …)
С этого ресурса: http://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx
Чтобы обнаружить IE 10 в режиме совместимости, а не в обычном IE 7, вы должны посмотреть на токен Trident/6.0
который идентифицирует IE 10 независимо от режима.
Чтобы обнаружить это из PHP, возьмите пользовательский агент из заголовков и проанализируйте его для токена Trident/6.0
.
Вы можете узнать больше версий Internet Explorer из токена Trident: IE9 имеет Trident/5.0
, IE 8 имеет Trident/4.0
, IE 7 не имеет Trident в его пользовательском агенте.
Строку пользовательского агента можно найти в $_SERVER['HTTP_USER_AGENT']
. Оттуда тривиально искать подстроку внутри или с регулярным выражением.
Справочный элемент агента IE10:
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0)
Обратите внимание, что токен MSIE отличается, но токен Trident тот же. Это указывает на то, что у пользователя включен режим совместимости.
Нет, это не так.
Во-первых, весь смысл режима совместимости заключается в том, что он притворяется какой бы старой версией IE не был указан. Строка UA по умолчанию изменяется как часть этого, и она идентична строке UA, предоставленной реальной копией старой версии IE, которая эмулируется.
Во-вторых, режим браузера (например, режим рендеринга) и режим документа (т. Е. Пользовательский агент) могут быть установлены отдельно в инструментах dev; можно быть в режиме совместимости с IE8, но все же показывать пользовательский агент IE10.
Короче говоря, попытка обнаружить режим совместимости с использованием строки UA – плохая идея; это просто невозможно, и даже если это было возможно, его можно было бы легко подделать.
Тем не менее, у вас никогда не должно быть веских оснований для фактического выполнения этого. Если ваш сайт сообщает IE, чтобы отобразить страницу в режиме совместимости, сервер должен уже знать об этом; его не нужно проверять. Есть несколько краевых случаев, когда это может неожиданно возникнуть, но вы можете обойти тех, у которых есть метатег X-UA-Compatible
.
Лучшая практика – избегать режима совместимости, если это вообще возможно; если вы правильно написали свой сайт, режим совместимости должен быть совершенно ненужным. Если вам это нужно, вам лучше будет исправлять код для правильной работы в IE10.