Информация
Запрошенная вами тема показана ниже. Однако эта тема не включена в библиотеку.

Определение совместимости документов

.NET Framework 3.0
Новые возможности Windows Internet Explorer 8

Последнее обновление: февраль 2009 г.

Совместимость документов определяет отображение веб-страниц в Internet Explorer. В этой статье поясняется совместимость документов, способ задания режима совместимости документов для веб-страниц и выбор режима документов для веб-страницы.

Введение.

В Internet Explorer 8 реализован режим совместимости, который гарантирует одинаковое отображение веб-страниц в будущих версиях Internet Explorer. Режим совместимости документов является расширенной версией аналогичного режима Internet Explorer 6 и позволяет выбрать нужный режим отображения веб-страниц в Internet Explorer.

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

Необходимость обеспечения совместимости документов

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

Чтобы снизить этот риск, в Internet Explorer 6 был предусмотрен способ выбора интерпретации и отображения веб-страниц. По умолчанию использовался "Режим совместимости"; при его использовании страницы отображались в точности так, как при использовании предыдущих версий браузера. В "стандартном" режиме ("строгий режим") точнее поддерживались отраслевые стандарты, однако для использования этой расширенной поддержки веб-страницы должны были содержать соответствующую директиву <!DOCTYPE>.

Если сайт не содержал директивы <!DOCTYPE>, то в Internet Explorer 6 использовался режим совместимости. Если же сайт содержал допустимую директиву <!DOCTYPE>, которую браузер не мог распознать, то сайт отображался в стандартном режиме Internet Explorer 6. Поскольку директива <!DOCTYPE> уже была на некоторых сайтах, переход на режим совместимости был весьма успешным. Благодаря этому веб-разработчики могли выбрать наиболее подходящий момент для перевода своих сайтов на стандартный режим.

Со временем стандартный режим стал использоваться на все большем числе сайтов. Кроме того, веб-разработчики стали использовать функции Internet Explorer 6, чтобы определять браузер Internet Explorer. Например, браузер Internet Explorer 6 не поддерживал универсальный селектор; на некоторых сайтах это использовалось, чтобы предоставлять содержимое для Internet Explorer.

В Internet Explorer 7 появились новые возможности (в том числе и поддержка универсального селектора) для более полной поддержки отраслевых стандартов. Директива <!DOCTYPE> поддерживает только два режима (режим совместимости и стандартный режим), стандартный режим Internet Explorer 7 пришел на замену аналогичному режиму Internet Explorer 6.

В результате сайты, которые опирались на поведение стандартного режима Internet Explorer 6 (в частности, на отсутствие поддержки универсального селектора), оказались неспособны определить новую версию этого браузера. Таким образом, содержимое, предназначенное для Internet Explorer, не предоставлялось браузеру Internet Explorer 7, и сайты отображались неправильно. Поскольку в Internet Explorer 7 было предусмотрено только два режима совместимости, владельцам сайтов пришлось переделывать свои сайты для поддержки Internet Explorer 7.

Internet Explorer 8 поддерживает отраслевые стандарты лучше, чем все предыдущие версии этого браузера. Вследствие этого сайты, разработанные для предыдущих версий этого браузера, могут отображаться неправильно. Для устранения возможных проблем в Internet Explorer 8 была реализована концепция совместимости документов, которая позволяет указать версии Internet Explorer, поддерживаемые каждым сайтом. Режим совместимости документов добавляет новые режимы в Internet Explorer 8, которые указывают браузеру, как следует обрабатывать и отображать веб-сайт. Если сайт отображается в Internet Explorer 8 неправильно, можно либо обновить сайт до уровня самых современных веб-стандартов (желательно) или принудительно отображать содержимое так, как будто оно просматривается в более старой версии браузера. Для этого следует добавить элемент meta в заголовок X-UA-Compatible веб-страниц.

Это позволит обновить сайт для поддержки новых возможностей Internet Explorer 8 в удобное время.

Понимание режимов совместимости документов

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

  • Режим эмуляции IE8 заставляет Internet Explorer использовать директиву <!DOCTYPE> для задания способа отображения содержимого. Директивы стандартного режима отображаются в стандартном режиме Internet Explorer 8, а директивы режима совместимости отображаются в режиме IE5. В отличие от режима IE8, в режиме эмуляции IE8 поддерживается директива <!DOCTYPE>.

  • Режим эмуляции IE7 заставляет Internet Explorer использовать директиву <!DOCTYPE> для задания способа отображения содержимого. Директивы стандартного режима отображаются в стандартном режиме Internet Explorer 7, а директивы режима совместимости отображаются в режиме IE5. В отличие от режима IE7, в режиме эмуляции IE7 поддерживается директива <!DOCTYPE>. Это предпочтительный режим совместимости для многих веб-сайтов.

  • В режиме IE5 содержимое отображается в режиме совместимости Internet Explorer 7, который очень похож на режим отображения в Internet Explorer 5.

  • В режиме IE7 содержимое отображается в стандартном режиме Internet Explorer 7 вне зависимости от наличия на странице директивы <!DOCTYPE>.

  • В режиме IE8 обеспечивается наивысший уровень соответствия отраслевым стандартам, в том числе: Спецификация консорциума W3C каскадных таблиц стилей (CSS) уровня 2.1  Ссылка в Интернете и API селекторов консорциума W3C  Ссылка в Интернете, а также ограниченная поддержка спецификации каскадных таблиц стилей W3C уровня 3 (действующий черновик)  Ссылка в Интернете.

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

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

Выбор режимов совместимости документов

Чтобы задать режим совместимости документов для веб-страниц, добавьте элемент meta для включения заголовка X-UA-Compatible http-equiv на веб-страницу. В следующем примере задается режим совместимости "Эмуляция IE7".

<html>
<head>
  <!-- Mimic Internet Explorer 7 -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <title>My Web Page</title>
</head>
<body>
  <p>Content goes here.</p>
</body>
</html> 

Атрибут content задает режим для страницы, например, чтобы имитировать работу Internet Explorer 7, укажите IE=EmulateIE7. Укажите IE=5, IE=7 или IE=8, чтобы выбрать один из этих режимов совместимости. Также можно задать IE=edge, чтобы использовать в Internet Explorer 8 наивысший доступный режим.

В заголовке X-UA-Compatible не учитывается регистр, но этот элемент должен находиться в заголовке веб-страницы (в разделе HEAD) до всех прочих элементов, кроме элемента title и других метаэлементов.

Настройка веб-серверов для выбора режимов совместимости по умолчанию

Администраторы сайтов могут настраивать на своих сайтах режим совместимости определенного документа по умолчанию, определяя настраиваемый заголовок сайта. Применяемый при этом процесс зависит от используемого веб-сервера. Например, следующий файл web.config позволяет IIS задать настраиваемый заголовок, который автоматически отображает все страницы в режиме IE7.

<?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> 

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

Сведения о написании настраиваемых заголовков см. в документации по используемым веб-серверам. Также см. следующие материалы:

Определение режима совместимости документов

Чтобы определить для веб-страницы режим совместимости документа с помощью Internet Explorer 8, нужно использовать свойство documentMode объекта document. Например, если ввести следующий текст в адресной строке Internet Explorer 8, будет отображен режим совместимости документов для текущей веб-страницы.

javascript:alert(document.documentMode);

Свойство documentMode возвращает числовое значение, соответствующее режиму совместимости документов на странице. Например, если на странице выбран режим совместимости IE8, то свойство documentMode имеет значение 8.

Свойство compatMode, которое было впервые реализовано в Internet Explorer 6, считается устаревшим, а ему на смену пришло свойство documentMode, реализованное в Internet Explorer 8. Приложения, использующие свойства compatMode, будут по-прежнему работать в Internet Explorer 8, однако их следует обновить, чтобы использовать свойство documentMode.

Чтобы использовать JavaScript для определения режима совместимости документов, включите код, поддерживающий старые версии Internet Explorer, как показано в следующем примере.

engine = null;
if (window.navigator.appName == "Microsoft Internet Explorer")
{
   // This is an IE browser. What mode is the engine in?
   if (document.documentMode) // IE8
      engine = document.documentMode;
   else // IE 5-7
   {
      engine = 5; // Assume quirks mode unless proven otherwise
      if (document.compatMode)
      {
         if (document.compatMode == "CSS1Compat")
            engine = 7; // standards mode
      }
   }
   // the engine variable now contains the document compatibility mode.
}

Значения атрибута Content

Атрибут Content гибок и принимает значения, отличные от описанных ранее. Это позволяет точнее настраивать отображение веб-страниц в Internet Explorer. Например, можно установить для атрибута Content значение IE=7.5. При этом Internet Explorer пытается преобразовать значение в вектор версии и выбирает ближайший подходящий режим. В данном случае будет использоваться режим IE7. В следующих примерах показаны режимы, выбираемые для других значений, когда нет прочих влияющих факторов.

<meta http-equiv="X-UA-Compatible" content="IE=4">   <!-- IE5 mode -->
<meta http-equiv="X-UA-Compatible" content="IE=7.5" > <!-- IE7 mode -->
<meta http-equiv="X-UA-Compatible" content="IE=100" > <!-- IE8 mode -->
<meta http-equiv="X-UA-Compatible" content="IE=a" >   <!-- IE5 mode --> 

<!-- This header mimics Internet Explorer 7 and uses 
     <!DOCTYPE> to determine how to display the Web page -->
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >    
Примечание. В предыдущем примере показаны результаты отдельных значений атрибута Content. На практике Internet Explorer обрабатывает только первый заголовок X-UA-Compatible на веб-странице.

Также можно использовать атрибут Content, чтобы указать несколько режимов совместимости документа. Это позволит правильно отображать документ в будущих версиях браузера. Чтобы указать несколько режимов документов, установите атрибут Content для нужных режимов. Режимы следует перечислять через точку с запятой.

Если та или иная версия Internet Explorer поддерживает несколько запрошенных режимов совместимости, то будет использован наивысший доступный режим, указанный в заголовке атрибута Content. Можно использовать эту возможность, чтобы исключить определенные режимы совместимости, хотя это не рекомендуется. Например, в следующем заголовке исключается режим IE7.

<meta http-equiv="X-UA-Compatible" content="IE=5; IE=8" >

Управление отображением по умолчанию

Если в Internet Explorer 8 открыть веб-страницу, не содержащую элемента X-UA-Compatible header, то для определения режима отображения будет использована директива <!DOCTYPE>. Если этой директивы нет или она не указывает стандартный тип документа, то Internet Explorer 8 отобразит страницу в режиме IE5 (в режиме совместимости).

Если директива <!DOCTYPE> указывает стандартный тип документа, то Internet Explorer 8 отобразит страницу в режиме IE8 кроме следующих случаев:

  • Для этой страницы включено представление совместимости.

  • Страница загружается из зоны интрасети, а браузер Internet Explorer 8 настроен для отображения страниц из зоны интрасети в представлении совместимости.

  • Internet Explorer 8 настроен для отображения всех сайтов в представлении совместимости.

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

  • Для переопределения параметров веб-страницы используются средства разработчика.

  • На веб-странице обнаружена ошибка разметки, а браузер Internet Explorer 8 настроен для автоматического восстановления после таких ошибок путем повторного открытия страницы в представлении совместимости.

Дополнительные сведения см. в разделе Блог, посвященный браузеру Internet Explorer: обсуждение представления совместимости  Ссылка в Интернете.

Примечание. Если браузер Internet Explorer настроен для загрузки страниц интрасети в представлении совместимости, то для страниц, загруженных с локального адреса или с петлевого адреса, делается исключение. Страницы, загруженные описанными способами, отображаются в режиме IE8, если директива <!DOCTYPE> указывает стандартный тип документа.

Кроме того, можно настроить обработку браузером Internet Explorer страниц, не содержащих заголовков X-UA-Compatible, с помощью следующего раздела реестра.

HKEY_LOCAL_MACHINE (или HKEY_CURRENT_USER)
     SOFTWARE
          Microsoft
               Internet Explorer
                    Main
                         FeatureControl
                              FEATURE_BROWSER_EMULATION
                                   iexplore.exe = (DWORD)

Параметр должен иметь одно из следующих значений типа DWORD.

ЗначениеОписание
7000Страницы, содержащие стандартные директивы <!DOCTYPE>, отображаются в режиме IE7.
8000Страницы, содержащие стандартные директивы <!DOCTYPE>, отображаются в режиме IE8.
8888Страницы всегда отображаются в режиме IE8 вне зависимости от директив <!DOCTYPE>. (При этом указанные выше исключения не учитываются.)

По умолчанию приложения, в которых размещен элемент управления WebBrowser, открывают стандартные страницы в режиме IE7, если на страницах отсутствует соответствующий заголовок X-UA-Compatible. Изменить это можно, добавив имя исполняемого файла приложения в свойство FEATURE_BROWSER_EMULATION элемента управления и установив соответствующее значение.

Заключение

Совместимость — важная проблема, с которой приходится сталкиваться веб-дизайнерам. Лучше всего создавать универсальные сайты, в которых не используются компоненты и возможности какого-либо одного определенного веб-браузера, однако иногда это невозможно. Режим совместимости документов привязывает веб-страницу к поведению определенной версии Internet Explorer.

C помощью заголовка X-UA-Compatible можно указать версии Internet Explorer, поддерживаемые веб-страницами. С помощью свойства document.documentMode можно определить режим совместимости веб-страницы.

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

См. также

Добавления сообщества

Показ:
© 2014 Microsoft