Прежде чем читать:
Прежде чем читать конкретное содержание статьи, я надеюсь, вы сможете сначала открыть IE8, открыть http://www.taobao.com , а затем ввести в адресную строку:
javascript:alert(document.documentMode +navigator.userAgent);void(0)
Я не знаю, удивлены ли вы, увидев результаты. В любом случае, я нахожу это очень странным, потому что в мета-странице нет тега совместимости, а в http-заголовке нет тега X-UA-Compatible, когда Fiddler проверяет. это. С какой стати сайт работает в режиме IE7 . Что дальше?
Режим совместимости IE7 и представление совместимости
Вчера, когда я читал статью о высокой адаптивности iframe в Word of Mouth, я обнаружил, что предоставленная ею демо-версия отличается от моей демо-версии в IE8. Онлайн-результат, очевидно, был таким же, как и в IETester7. Я также проверил это, и это было так. нет отметки совместимости в мета-файле, fiddler проверяет, что в http-заголовке нет отметки X-UA-Compatible, но почему онлайн-результаты отличаются от локальных? Это повергло меня в депрессию. Посмотрев еще раз, я обнаружил, что в онлайн-демо не отображается кнопка «Просмотр совместимости» в IE8. Если подумать, причина должна быть в этом.
Позже я нашел статью «Только факты: обзор представления совместимости». Хотя она не решила проблему, я хотел бы поделиться ею и процитировать один из ее отрывков:
Представление совместимости и тег X-UA-Compatible не эквивалентны.
Просмотр совместимости — это то, что вы делаете на клиенте. Он влияет на три вещи: строку User Agent, вектор версии (используемый при оценке условных комментариев) и режим DOCTYPE, который запускает стандарты — стандарты IE8 или стандарты IE7. -UA-совместимый тег / заголовок <META> — это то, что вы используете в содержимом страницы / на стороне сервера, и, если он присутствует, полностью переопределяет настройки представления совместимости на клиенте. Он влияет на две вещи: вектор версии и режим DOCTYPE, который запускает стандарты. Map to. Это не может повлиять на строку UA, поскольку уже слишком поздно ее менять — клиент уже отправил запрос GET на сервер (и он содержит строку UA). Для разработчиков это означает, что ваш сайт поворачивается. в строке User Agent добавление только тега X-UA-Compatible (чтобы IE8 отображал ваш сайт в режиме стандартов IE7) не сделает ваш веб-сайт совместимым — вам также необходимо обновить логику определения строки User Agent, как хорошо.
Это означает, что представление совместимости играет три роли:
Метатег играет только две роли: 1. Версия, 2. Тип документа.
(Здесь сказано, что метатег не влияет на UserAgent. Он должен ссылаться на ua на стороне сервера. Поскольку клиентский запрос был отправлен и содержит ua, на него это не повлияет. Однако ua клиента по-прежнему это повлияло, и отображается ie7.)
правильный:
(Возможно, предыдущий тест был неправильным) Пользовательский интерфейс клиента не будет затронут, он повлияет только на document.documentMode
кроме того:
Тег/заголовок <META> соответственно относится к: <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> и добавлению заголовков http на стороне сервера, например, в файле конфигурации .net:
Кроме того, вы также можете добавить заголовки http в IIS или Apache:
решение проблем
На данный момент проблема, описанная в начале статьи, все еще не решена. Вчера вечером я случайно увидел статью Цинь Гэ об использовании doctype для активации режима браузера . В ней упоминалось, что режим совместимости также будет включен в черном списке сайтов Microsoft. статья выше. Один из двух комментариев: res://iecompat.dll/iecompatdata.xml (только для IE8). Введите этот адрес в IE8, и он отобразит: Список просмотра совместимости. Таким образом, вы наконец сможете найти домен. имена Koubei и Taobao в этом списке, поэтому я думаю, что это должен быть ответ на вопрос в начале этой статьи. Вы также можете найти доменное имя в этом списке, открыть его и ввести JavaScript в начале. статья в адресной строке (ps: у Microsoft слишком много списков), конвертация очень многих сайтов в IE7.
<конфигурация>
<система.вебсервер>
<httpпротокол>
<customHeaders>
<очистить />
<add name="X-UA-Compatible" value="IE=EmulateIE7" />
</customHeaders>
</httpПротокол>
</system.webServer>
</конфигурация>