Internet Explorer 8 - сломался сайт

Материал из 1GbWiki.

(Различия между версиями)
Перейти к: навигация, поиск
Версия 19:35, 24 марта 2009 (править)
Dmach (Обсуждение | вклад)
м
← К предыдущему изменению
Версия 19:38, 24 марта 2009 (править) (отменить)
Dmach (Обсуждение | вклад)
м
К следующему изменению →
Строка 37: Строка 37:
=== IIS версии 7 === === IIS версии 7 ===
-Делается через файл web.config, если файла нет - нужно его создать в простомт текстовом редакторе. Ниже указан XML-элемент, который нужно добавить в файл. От вас при этом требуется знание языка XML:+Делается через файл web.config, если файла нет - нужно его создать в простом текстовом редакторе. Ниже указан XML-элемент, который нужно добавить в файл. От вас при этом требуется знание языка XML:
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>

Версия 19:38, 24 марта 2009

В статье описываются действия по исправлению сайта неверно отображаемого в обозревателе Internet Explorer версии 8, но правильно отображаемого в обозревателях Internet Explorer предыдущих версий.

Содержание

Cтандарты

Странички сайтов в интернете, - это текстовые файлы в которых содержание страницы описано специальным языком разметки. Язык разметки регламентируют специальные документы, называемые стандартами w3c - The World Wide Web Consortium (далее стандарты). К сожалению, эти стандарты не идеальны: они сложны и запутаны, существует множество их версий и трактовок, наиболее актуальные их части даже сейчас не утверждены и продолжают находится в состоянии разработки (то есть, например, могут изменится в любой момент).

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

К сожалению, очень часто развитие стандартов и их понимание браузерами приводит к потере обратной совместимости, то есть одинаковые страницы на новом и старом браузере могут выглядить по разному. В браузере Internet Explorer применяется несколько методов, которые позволяют отобразить старые страницы в новом браузере правильно.

Internet Explorer

Internet Explorer версии 7 (далее IE7, выпущен в 2006 году) умеет автоматически по содержанию страницы определять к какому уровню стандартов она относится: на основании элемента DOCTYPE языка разметки (можно не пытаться понимать назначение этого элемента, для текущей статьи это не существенно) он может отнести страницу к старым стандартам, характерным для Internet Explorer версии 5 (далее IE5, выпущен в 1999 году) или к новым, характерным для Internet Explorer версии 6 (далее IE6, выпущен в 2001 году) и показывать сайты используя один из этих двух режимов. Сам по себе IE7 относительно IE6 вносит поддержку незначительного множества элементов дополняющих видение стандартов браузером IE6 до современного уровня, но не меняет имеющиеся в IE6 элементы, что бы сохранить совместимость с ним. Таким образом удаётся добиться обратной совместимости между браузерами: новые страницы созданные для IE7 могут неверно показываться старым браузером IE6 но зато все старые страницы созданные с расчётом на IE6 корректно отображаются в IE7.

Internet Explorer версии 8 (далее IE8, выпущен в 2009 году) поддерживает все современные стандарты, в том числе для него заявлена полная поддержка CSS 2.1 (это также можно не пытаться понимать). Также IE8 включает в себя поддержку режимов, которые умел IE7. К сожалению, тут произошла ситуация, когда старые страницы могут отображаться неверно, так как старые версии Internet Explorer (IE 5, 6, 7) понимали стандарты в этом месте (CSS 2.1) сильно отлично от текущего понимания этого стандарта - обратная совместимость нарушена. Что бы не сломать множество сайтов созданных в расчёте на IE7 компания Microsoft планировала в IE8 по умолчанию установить режим эмуляции IE7 и только в случае наличия специального сигнала о том, что страница должна быть обработана в новом режиме - открывать её в режиме IE8, но под давление веб-программистов это решение было изменено: IE8 по умолчанию показывает страницы в режиме IE8, то есть в соответствии со всеми актуальными на текущий момент стандартами.

Что бы иметь возможность отобразить старые страницы правильно в новом браузере, если он сам не понял в каком режиме необходимо отобразить страницу, был придуман хитрый ход: сам сайт может сказать браузеру в каком режиме он должен быть показан: в режиме IE5, IE7 или IE8. То есть, для старых сайтов, которые неверно отображаются в режиме актуальных веб-стандартов можно явно указать в каком режиме они должны открываться браузером IE8, при это нет необходимости изменять страницы сайта. Как это сделать - будет показано ниже.

Режим совместимости сайта

Если ваш сайт неверно отображается в IE8 но верно в IE7 следует сказать браузеро, что нужно открывать сайт в режиме совместимости с IE7. Это можно сделать путём передачи веб-сервером браузеру HTTP-заголовка X-UA-Compatible со значением EmulateIE7. Ниже представлен список всех параметров, которые умеет понимать IE8:

  • IE=5, режим совместимости с IE5 или Quirsk-режим - унаследован от IE6
  • IE=7, режим стандартов IE7, без возможности автоматической установки совместимости с IE5
  • IE=EmulateIE7, режим IE7 в котором, на основании содержимого страницы, может произойти автоматически выбор межу IE=7 и IE=5 (так вёл себя браузер IE7 по умолчанию)
  • IE=8, режим IE8 (актуальные стандарты) - применяется по умолчанию
  • IE=Edge, режим совместимости с самыми современными стандартами: для IE8 он равен режиму IE=8, для IE9 будет равен режиму IE=9 и так далее

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

IIS версии 6

Установка нужного режима выполняется через запрос к службе поддержки, самостоятельно сделать это нельзя. Отправьте службе поддержки запрос:

для сайта example.com необходимо установить дополнительный http-заголовок "X-UA-Compatible: EmulateIE7"

IIS версии 7

Делается через файл web.config, если файла нет - нужно его создать в простом текстовом редакторе. Ниже указан XML-элемент, который нужно добавить в файл. От вас при этом требуется знание языка XML:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <system.webServer>
      <httpProtocol>
         <customHeaders>
            <clear />
            <add name="X-UA-Compatible" value="IE=EmulateIE7" />
         </customHeaders>
      </httpProtocol>
   </system.webServer>
</configuration>

Apache

Делается через файл .htacces, ниже указан примет текста который нужно добавить в файл. Если файла нет - нужно его создать в простомт текстовом редакторе.

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

Ссылки по теме

Личные инструменты