Подтвердить что ты не робот

Обнаружить режим совместимости IE8

Возможный дубликат:
Разделите браузер IE7 и браузер в режиме совместимости с IE7

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

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

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

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

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

4b9b3361

Ответ 1

В 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 (просмотр совместимости)
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)

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

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

Ответ 5

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

Если у вас есть доступ к самому серверу, вы можете отправить HTTP-заголовок, посмотрите блог Майка Ормонда об этом. Страница MSDN для Реализация мета-переключателя в IIS содержит сведения о заголовке и способах его установки/отправки.