27

Можно создать дубликат:
Differentiate IE7 browser and browser in IE7 compatibility modeDetect режиме совместимости IE8

Мы не успели полностью протестировать IE8 с нашей довольно обширной системой. Мы также достигаем точки, в которой мы не можем запретить использование IE8. Наши пользователи упрямы и не очень сложны, поэтому мы не чувствуем, что можем сказать им использовать кнопку «Режим совместимости». Вместо этого мы добавим метатег «IE = EmulateIE7» как временное исправление .

Проблема заключается в том, что при использовании этого тега браузер по-прежнему считает себя IE8, который затем обнаруживается нашими страницами и отклоняется. Я могу понять, почему обнаружение на стороне сервера не может получить метатег (у сервера уже есть пользовательский агент до отправки и обработки метатега), но проверки на стороне клиента также терпят неудачу. Если на компьютерах клиентов щелкнуть кнопку режима совместимости, пользовательский агент - это IE7, но не если мы используем метатег.

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

Кто-нибудь еще столкнулся с этим и придумал лучший подход? Нет ли способа обнаружить, что IE8 работает в режиме совместимости, когда режим установлен метатегом?

И мы знаем, что существует разумная школа мысли о том, что мы должны просто сделать все страницы совместимыми с стандартом IE8, но в нашем маленьком уголке реальности это не является возможным вариантом прямо сейчас (и я, что мы не создали 4 или 5 версий IE, которые должны были быть написаны нестандартным образом).

+0

Я знаю, что я опоздавший, но после достаточного количества тестов я могу настоятельно рекомендовать этот метод для обнаружения режимов рендеринга IE-документа: http://stackoverflow.com/a/13732003/850782 – EpicVoyage

+0

Я просто добавил решение, которое обрабатывает (все случаи?) режим совместимости с рекомендуемым дублирующимся вопросом. Источник оригинала: http://stackoverflow.com/a/29288153/2879498 – TylerY86

ответ

1

Не совсем «обнаружение режима совместимости IE8», но это может помочь только так:

Если у вас есть доступ к самому серверу, вы можете отправить в HTTP-заголовок, взгляните на Mike Ormond's blog about it. На странице MSDN для Implementing the Meta Switch on IIS есть сведения о заголовке и о том, как установить/отправить его.

12

Вам нужно проверить значение document.documentMode, которое будет иметь значение 8 в истинном режиме IE8 и 7 в режиме IE7. Строка пользовательского агента будет одинаковой в обоих случаях и будет по-прежнему указывать IE8. Обратите внимание, что эта переменная JavaScript доступна только в IE8.

+4

Строка пользовательского агента не совсем то же самое для IE7 и IE8 в представлении совместимости, в строке есть дополнительный токен Trident 4.0. См. Здесь: http://blogs.msdn.com/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx –

+1

Это не будет работать в IE9 или IE10? – djangofan

24

IE8 включает в себя токен трезубца в строке User-Agent независимо от режима совместимости.

См MSDN для получения более подробной информации: http://blogs.msdn.com/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx

IE7 на Windows Vista
Mozilla/4.0 (совместимый; MSIE 7.0, Windows NT 6.0)

IE8 на Windows Vista (Compatibility View)
Mozilla/4.0 (совместимый; MSIE 7.0; Windows NT 6.0; Trident/4.0)

IE8 в Windows Vista
Mozilla/4.0 (совместим; MSIE 8.0; Windows NT 6.0; Trident/4.0)

+4

Повторить, что это правильный ответ: нет Trident, это IE7, с Trident это IE8 (или позже). – GlennG

2

Проблема на самом деле еще сложнее, когда вы имеете дело со ссылками, приходящими на ваш сайт, с сайтов IE8 эмуляции BLACKLIST, таких как Facebook.

Общая ссылка на Facebook заставляет ваши ссылки открываться в всплывающем окне - ЕСЛИ «ВКЛЮЧИТЬ ОБНОВЛЕНИЕ WEBLISTS» проверяется на настройках просмотра совместимости, который по умолчанию установлен, всплывающее окно видит ссылку «Черный список» из Facebook и открывается сначала в окне черного списка. При обнаружении в фоновом режиме для Trident \ 4.0 - вы увидите значение и установите нижний уровень CSS.

Однако после загрузки браузера он отключается из режима совместимости и переходит в режим STANDARD без обновления. Поэтому у вас есть неправильный CSS для стандартных режимов.

Решение. Извлеките браузер IE из режима совместимости. Да, кажется странным, почему бы пользователю перейти на уровень ниже вашего сайта, если вам это не нужно.

Как и Downlevel, вы устанавливаете IE = EmulateI7, чтобы заставить браузер опускаться, вы можете добавить IE = EmulateIE8 и заставить пользователя просматривать вашу страницу в стандарте IE8. этот режим даже удаляет их способность выбирать представление совместимости и уменьшает ваши потребности в тестировании для этого режима.

5

FYI, для получения подробной информации о том, как определить режим совместимости (AKA, как обнаружить представление совместимости), рассмотрите следующую ссылку ...

http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx

... который показывает некоторую полезную информацию.

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

  • Нет связанных вопросов^_^