Разочарование: не удается заставить IE 8 перейти в режим совместимости!

У меня два очень разных сайта. Оба они имеют разные ошибки при отображении в режиме браузера "Internet Explorer 8"!

При нажатии кнопки «Просмотр совместимости» рядом с адресной строкой оба сайта выглядят великолепно. Когда я впоследствии смотрю на «Режим браузера» и «Узел документа», используя встроенные «Инструменты разработчика», я также замечаю, что «Режим браузера» - это «Совместимость с IE8», а «Режим документа» - «Стандарты IE7» ". Как я и ожидал.

Затем я хочу принудительно перевести "Internet Explore 8" в "режим браузера": "представление совместимости с IE8", чтобы моим пользователям не приходилось нажимать кнопку "Просмотр совместимости" рядом с адресной строкой, чтобы получить то, что им действительно нужно. видеть.

Единственный способ, которым я могу это сделать, - это вставить метатег под заголовком внутри заголовка следующим образом:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
    <head>
        <title>Test</title>
        <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
        <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
        <link ... />
        <script ...></script>
    </head>
    <body>
        ...
    </body>
</html>

Затем я перезагружаю веб-сайт, и кнопка «Просмотр совместимости» рядом с адресной строкой исчезает. Как и ожидалось. Когда я потом смотрю на «Режим браузера» и «Узел документа», используя встроенные «Инструменты разработчика», я внезапно вижу то, чего я действительно НЕ ожидал. Я ожидал, что «Режим браузера» будет «Совместимость с IE8», а «Узел документа» - «Стандарты IE7», но «Режим браузера» - «IE8», «Режим документа» - «Стандарты IE7», а веб-сайты внезапно имеют новый набор ошибок по сравнению с просмотром в режиме браузера "Internet Explorer 8"!

Это очень неприятно, почему я не могу принудительно перейти в режим браузера «IE8 Compat view» вместо режимов браузера «Internet explore 7» или «Internet explore 8»?


person Maya Kathrine Andersen    schedule 03.08.2009    source источник
comment
У меня такая же проблема, рад, что нашел ваш пост. Хотя ниже есть несколько хороших ответов, что вы в конечном итоге сделали, чтобы это исправить? Моя единственная разница заключалась в том, что я установил X-UA-Compatible: IE = EmulateIE7 через заголовок вместо метатега, но такая же проблема существует. Я использую некоторые сторонние элементы управления, и они работают правильно в IE8 только тогда, когда пользователь нажимает кнопку совместимости в браузере или выбирает Отображать все веб-сайты в режиме совместимости .. заголовок или мета работают точно так, как вы описываете :(   -  person felickz    schedule 24.02.2012


Ответы (8)


На процитируйте IEBlog:

«Режим браузера» влияет на строку пользовательского агента, вектор версии, используемый при оценке условных комментариев, и режим визуализации.

Подробнее об этом см. http://msdn.microsoft.com/en-us/library/dd565624(VS.85).aspx.

Как вы можете ясно видеть, вы все равно не сможете повлиять на все эти вещи: к тому времени, когда вы укажете браузеру действовать как IE7, он уже будет действовать как IE8.

Возможно, реальный вопрос заключается в следующем: Почему для вас так важно, какой режим обозревателя? обеспокоенные относятся к тому, что исключено / включено, кроме проверки версии, и пользователи в любом случае не собираются заглядывать в инструменты разработчика, поэтому им все равно.

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

РЕДАКТИРОВАТЬ:

Проблема заключается в проверке вашей версии, и, как я обещал ниже, я расскажу вам, в чем проблема.

Если вы используете инструменты разработчика для отладки скрипта размещения меню, вы можете покопаться и увидеть, что путь выполнения для get_x_position отличается, когда браузер сообщает о себе как IE7 или IE8: для is_ie5up установлено значение true для режима IE7 и false для режима IE8. . В результате возвращаются очень разные значения.

На этом этапе мы должны вернуться туда, где установлена ​​эта переменная:

var is_ie5up    = (is_ie6up || (is_ie  && !is_ie3 && !is_ie4));

Как видите, это зависит от значения is_ie6up, поэтому давайте посмотрим на окружающий код ...

var is_ie8up    = (is_ie8   ||  is_ie9up);
var is_ie7up    = (is_ie7   ||  is_ie8up);
var is_ie7up    = (is_ie7);
var is_ie6up    = (is_ie6   || is_ie7);
var is_ie5up    = (is_ie6up || (is_ie  && !is_ie3 && !is_ie4));
var is_ie5_5up  = (is_ie6up || (is_ie && !is_ie3 && !is_ie4 && !is_ie5));

... вы заметили недостаток (подсказка: сравните строки 2 и 4 этого фрагмента)?

Правильно: is_ie6up не имеет значения true, если браузер точно не IE6 или IE7. Правильная строка, конечно, должна читаться

var is_ie6up    = (is_ie6   || is_ie7up);

...но ждать. Это тоже нехорошо, потому что строка 3 фрагмента изменяет is_ie7up и становится истинным только в том случае, если браузер - это именно IE7! Итак, вам нужно удалить перезапись is_ie7up и исправить настройку is_ie6up.

Я предполагаю, что у вас ТОЧНАЯ такая же проблема на другом сайте: вы так же испортили проверки браузера.

person Michael Madsen    schedule 03.08.2009
comment
Почему для вас так важно, какой режим браузера? Это важно, потому что мне нужно принудительно / запускать третий режим браузера. Internet Explore 8 Compatibility View, потому что ТОЛЬКО в этом режиме мой сайт выглядит правильно. EmulateIE7 запускает режим браузера Internet explore 8 и режим документа IE7 Standards, но в моем случае это визуально не то же самое, что Internet Explore 8 Compatibility View, и это выглядит неправильно. - person Maya Kathrine Andersen; 05.08.2009
comment
URL-адрес одного из сайтов: topotarget.com и topotarget.com/index_test.dsp вы можете увидеть главную страницу сайта с включенным EmulateIE7. Надеюсь, это поможет вам понять мою проблему. - person Maya Kathrine Andersen; 05.08.2009
comment
Об инструментах разработчика: я использую его только для отладки, чтобы доказать свою точку зрения в этом вопросе. Я понимаю, что вы об этом говорите. - person Maya Kathrine Andersen; 05.08.2009
comment
Проблема, как упоминалось ранее, в проверках вашей версии. Я отредактирую свой пост, чтобы показать, где именно все идет не так. - person Michael Madsen; 06.08.2009

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

Чтобы узнать, что увидят ваши пользователи:

  1. Щелкните Document Mode на панели инструментов разработчика и посмотрите, какое значение отмечено (Page Default).
  2. Перезапустите IE8 и просмотрите свой документ - IE теперь должен использовать страницу по умолчанию.
person Walter Rumsby    schedule 10.08.2009

Атрибут xmlns = "http://www.w3.org/1999/xhtml" отменяет метатег. Переместите метатег над тегом html. Да, верно, над тегом html. Затем он выполнит emulateIE7 перед запуском javascript. Я тестировал это в IE7, IE8 и Firefox.

person Community    schedule 09.10.2009
comment
Да! У меня был emulateIE7 внутри оператора If IE, который после удаления и над HTML работал. Этот совет наконец-то сработал для меня, спасибо. - person rtfminc; 23.07.2010

В моем конкретном случае мой сайт не будет правильно отображаться в режиме совместимости. Наконец я узнал, что режим браузера влияет на строку пользовательского агента. Мои правила стиля сайта были основаны на User Agent, поэтому некоторые стили просто не применялись в представлении Compat.

Я использовал

document.documentElement.setAttribute('data-useragent', navigator.userAgent);

так что позже я мог бы использовать селекторы атрибутов css, такие как

html[data-useragent*='MSIE 8.0'] p {}

Решил, добавив:

html[data-useragent*='MSIE 7.0'] p {}

(не заботясь об истинном IE7, поскольку настоящий IE7 все равно не поддерживался)

По моему опыту, разработчик ничего не может сделать, чтобы заставить IE8 перейти из «Режим браузера: IE8 Compat View» в «Режим браузера: IE8». Опять же, я говорю о BrowserModes, а НЕ DocumentModes (которыми можно управлять с помощью метатегов, заголовков ответов и т. Д.).

person LucasM    schedule 25.04.2014


Я преобразовывал XML-документ, поэтому не смог правильно установить DOCTYPE. Вместо того, чтобы перемещаться выше <html>, что недопустимо для XML, я просто помещаю его в заголовок.

В PHP:

header("X-UA-Compatible: IE=7");
person Warren Seine    schedule 09.06.2011

Возникла проблема с принудительным переводом IE8 в режим документа по стандартам IE8 с использованием HML5 Boilerplate для классического сайта asp. Собрав воедино ответы на этот и другие вопросы, добавив этот код ВЫШЕ объявления <doctype>, похоже, разрешили проблему и принудительно вернули режим документа из IE7 в IE8. <%= response.AddHeader("X-UA-Compatible", "IE=edge") %>

person mg1075    schedule 06.01.2012

Если ваша страница содержит материалы ASP.NET Ajax, вам может потребоваться обновить сайт с помощью этого

http://support.microsoft.com/kb/2600088

person Metro    schedule 11.12.2012