Принудительно IE8 * не * использовать представление совместимости - PullRequest
55 голосов
/ 14 января 2010

Только что обновил мой сайт до более нового, более совместимого со стандартами дизайна. Мой предыдущий дизайн был настолько мусорным, что мне пришлось использовать тег IE = EmulateIE, чтобы вызвать эмуляцию IE7.

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

Есть ли какой-нибудь противоположный тег, который я мог бы использовать, или какое-то волшебство, которое я могу заставить PHP сделать, чтобы заголовки HTTP отключили кэширование этого параметра?

Ответы [ 4 ]

51 голосов
/ 21 января 2010

При отсутствии заголовка http-экв., Совместимого с X-UA, режим совместимости определяется !DOCTYPE (или отсутствием !DOCTYPE, в зависимости от обстоятельств). Диаграмма, из которой !DOCTYPE показывает, какой режим (в различных браузерах) приведен здесь:

http://hsivonen.iki.fi/doctype/ (Вам нужно будет прокрутить вниз до нижней части страницы.)

Вы можете переопределить это поведение, используя элемент meta, чтобы указать X-UA-совместимый заголовок http-эквивалента, например так: <meta http-equiv="X-UA-Compatible" content="IE=edge" >

(Примечание: IE = edge соответствует самой высокой из доступных версий - в настоящее время IE8 на момент публикации - или можно явно указать IE8.)

Для получения дополнительной информации см. Здесь: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx

8 голосов
/ 16 мая 2011

Вы также можете установить заголовок X-UA-Compatible в Apache через конфигурационный файл или файл .htaccess, используя приведенный ниже код. Кредит переходит на html5boilerplate.com

# ----------------------------------------------------------------------
# Better website experience for IE users
# ----------------------------------------------------------------------

# Force the latest IE version, in various cases when it may fall back to IE7 mode
# github.com/rails/rails/commit/123eb25#commitcomment-118920
# Use ChromeFrame if it's installed for a better experience for the poor IE folk

<IfModule mod_setenvif.c>
  <IfModule mod_headers.c>
    BrowserMatch MSIE ie
    Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
  </IfModule>
</IfModule>

<IfModule mod_headers.c>
#
# Because X-UA-Compatible isn't sent to non-IE (to save header bytes), we need to inform proxies that content changes based on UA
#
  Header append Vary User-Agent
# Cache control is set only if mod_headers is enabled, so that's unncessary to declare
</IfModule>
5 голосов
/ 18 сентября 2012

Я знаю, что этот пост старый, но я считаю, что добавляю его в ваш файл .htaccess:

Header set X-UA-Compatible "IE=edge"

... чтобы быть более управляемым, чем добавлять его на страницы.

Надеюсь, это кому-нибудь поможет.

5 голосов
/ 24 января 2010

IE никогда не будет кэшировать параметр X-UA-Compatibility сам по себе. Единственная другая возможность состоит в том, что пользователи сайта нажимали кнопку «Просмотр совместимости» в адресной строке до того, как был установлен метатег X-UA-Compatbile. Тогда домен вашего сайта появится в списке, хранящемся локально на компьютере клиента. Я написал сообщение в блоге о том, как владельцы сайтов могут обрезать свои домены из этого локально сохраненного списка, если / когда сайт обновляется для обеспечения совместимости с IE8. http://blogs.msdn.com/ie/archive/2009/07/01/ie-compatibility-list-pruning.aspx

...