Jump to content

Условный комментарий

Условные комментарии — это условные операторы , интерпретируемые Microsoft Internet Explorer версий с 5 по 9 в исходном коде HTML . Их можно использовать для передачи и сокрытия кода в этих версиях Internet Explorer и из них. Условные комментарии не поддерживаются в Internet Explorer 10 и 11 .

Условные комментарии в HTML [1] впервые появился в браузере Microsoft Internet Explorer 5, хотя сейчас его поддержка устарела. В Internet Explorer 10 условные комментарии HTML не поддерживаются, когда страница находится в стандартном режиме (режим документа 10). [2] JScript Условные комментарии были представлены в Internet Explorer 4 и продолжали поддерживаться в Internet Explorer 10 в стандартном режиме или режиме совместимости.

Вот простой пример, демонстрирующий, как работают условные комментарии.

<!--[if lt IE 9]>
<script src="https://cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.js" integrity="sha512-BWbLJlfp8hzXlxT6K5KLdxPVAj+4Zn2e4FVq5P7NSFH/mkAJ18UiZRQUD4anR3jyp0/WYkeZ0Zmq5EWWrDxneQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<![endif]-->

Синтаксис

[ редактировать ]

Существует два типа «условных комментариев»: раскрытый нижний уровень и скрытый нижний уровень .

Основной синтаксис каждого типа комментариев показан в следующей таблице. Первый показанный комментарий — это базовый комментарий HTML, который включен в целях сравнения и для иллюстрации различного синтаксиса, используемого каждым типом условного комментария.

Тип комментария Синтаксис или возможное значение
стандартный комментарий HTML <!-- Содержание комментария -->
скрытый на нижнем уровне <!--[if выражение ]> HTML <![endif]-->
раскрытый на нижнем уровне <![if выражение ]> HTML <![endif]>

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

Элемент Пример Комментарий
ИЕ [если IE] Строка IE — это функция , соответствующая версии Internet Explorer, используемой для просмотра веб-страницы.
ценить [if IE 7] Целое число или число с плавающей запятой, соответствующее версии браузера . Возвращает логическое значение true, если номер версии соответствует версии браузера. Дополнительные сведения см. в разделе Векторы версий .
WindowsEdition [if WindowsEdition] Internet Explorer 8 в Windows 7. Строка WindowsEdition — это функция , соответствующая выпуску Microsoft Windows, используемому для просмотра веб-страницы.
ценить [if WindowsEdition 1] Целое число, соответствующее выпуску Windows, используемому для просмотра веб-страницы. Возвращает логическое значение true, если значение соответствует используемой редакции. Информацию о поддерживаемых значениях и описываемых ими выпусках см. pdwReturnedProductType параметр GetProductInfo функция. [3]
true [if true] Всегда оценивается как true.
false [if false] Всегда оценивается как ложь.

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

Элемент Пример Комментарий
! [if !IE] Логический оператор НЕ . Он помещается непосредственно перед свойством , оператором или подвыражением , чтобы инвертировать логическое значение выражения.
lt [if lt IE 5.5] Оператор «меньше». Возвращает true, если первый аргумент меньше второго аргумента.
lte [if lte IE 6] Оператор меньше или равно. Возвращает true, если первый аргумент меньше или равен второму аргументу.
gt [if gt IE 5] Оператор «больше чем». Возвращает true, если первый аргумент больше второго аргумента.
gte [if gte IE 7] Оператор «больше или равно». Возвращает true, если первый аргумент больше или равен второму аргументу.
( выражение  ) [if !(IE 7)] Операторы подвыражений. Используется в сочетании с логическими операторами для создания более сложных выражений.
& [if (gt IE 5)&(lt IE 7)] Логический И. оператор Возвращает true, если все подвыражения имеют значение true.
| [if (IE 6)|(IE 7)] Логический оператор ИЛИ . Возвращает true, если какое-либо из подвыражений имеет значение true.

Условный комментарий, скрытый на нижнем уровне

[ редактировать ]

Ниже приведены два примера условного комментария «скрытый на нижнем уровне»:

<!--[if IE 8]>
<link href="ie8only.css" rel="stylesheet">
<![endif]-->

или

<!--[if lte IE 7]>
<style type="text/css">
/* CSS here */
</style>
<![endif]-->

Директива в первом примере позволит IE 8 прочитать указанный файл CSS, тогда как IE 7 или более ранние версии IE будут его игнорировать. Браузеры, отличные от IE, также проигнорируют его, поскольку он выглядит как стандартный комментарий HTML. Тег во втором примере позволит IE версий с 5.0 по 7 читать внутренний стиль CSS. Используя этот тег по-разному, вы также можете выделить IE 6, IE 5 или версии IE, которые новее (больше) или старше (меньше), чем указанная версия.

Условный комментарий, раскрываемый на нижнем уровне

[ редактировать ]

Ниже приведен пример условного «комментария, показанного на нижнем уровне», который не является комментарием (X)HTML вообще , несмотря на вводящее в заблуждение имя, с использованием синтаксиса Microsoft по умолчанию:

<![if !IE]>
<link href="non-ie.css" rel="stylesheet">
<![endif]>

В этом примере показано содержимое, которое должно быть доступно только браузерам, отличным от IE, поскольку условие оценивается как «ложное» в IE (и, следовательно, содержимое игнорируется), в то время как сами теги не распознаются (и, следовательно, игнорируются) в браузерах, отличных от IE. . Это недопустимый HTML или XHTML.

Microsoft признает, что этот синтаксис не является стандартизированной разметкой. [4] намерение, чтобы эти теги были пропущены другими браузерами и отображали содержимое посередине. Чтобы обеспечить соответствие стандартам W3C, некоторые веб-разработчики используют альтернативный метод. [5] для условных комментариев, раскрываемых на нижнем уровне:

<!--[if !IE]>-->
<link href="non-ie.css" rel="stylesheet">
<!--<![endif]-->

Несмотря на некоторую запутанность структуры, этот конкретный синтаксис является допустимым (X)HTML и полезен для условных разделов, предназначенных специально для браузеров, отличных от IE; если условие оценивается как истинное (например, если пишется код, предназначенный для отображения в браузерах, отличных от IE , и в некоторых версиях IE), IE отобразит --> присутствует перед содержимым HTML. Эта проблема легко решается добавлением <! к начальному --> следующее:

<!--[if gt IE 6]><!-->
This code displays on non-IE browsers and on IE 7 or higher.
<!--<![endif]-->

Дополнительный <! игнорируется браузерами, отличными от IE, а также игнорируется IE независимо от условия: если false , игнорируется все внутри условного комментария, а если true , результирующий тег <!--> не распознается и поэтому игнорируется.

Условные комментарии в JScript

[ редактировать ]

Начиная с Internet Explorer 4, существует аналогичный запатентованный механизм добавления условных комментариев в JScript , известный как условная компиляция. [6]

Примеры кода:

<script>
/*@cc_on
  document.write("You are using IE4 or higher");
@*/
</script>

Было также несколько предопределенных переменных, [7] хотя на них больше нельзя полагаться, поскольку Microsoft изменила движок JScript IE6 с помощью XP SP3, и теперь он сообщает как @_jscript_version == 5.7. В результате возможный способ определения версии Internet Explorer с помощью условной компиляции можно увидеть ниже:

<script>
/*@cc_on

  @if (@_jscript_version == 11)
    document.write("You are using IE11 with an older document mode");
  @elif (@_jscript_version == 10)
    document.write("You are using IE10");
  @elif (@_jscript_version == 9)
    document.write("You are using IE9");
  @elif (@_jscript_version == 5.8)
    document.write("You are using IE8");
  @elif (@_jscript_version == 5.7)
    document.write("You are using IE" + (!window.XMLHttpRequest ? 6 : 7));
  @elif (@_jscript_version == 5.6)
    document.write("You are using IE6");
  @elif (@_jscript_version == 5.5)
    document.write("You are using IE5.5");
  @elif (@_jscript_version < 5.5)
    document.write("You are using a version older than IE5.5");
  @else
    document.write("You are using an unknown version of IE");
  @end
 
@*/
</script>

Однако условная компиляция больше не поддерживается в стандартном режиме Internet Explorer 11 . [8]

См. также

[ редактировать ]
[ редактировать ]
  1. ^ «Об условных комментариях» . Корпорация Майкрософт. Архивировано из оригинала 13 октября 2008 г. Проверено 24 октября 2007 г.
  2. ^ «Парсинг HTML5 в IE10» . Корпорация Майкрософт. 06.07.2011. Архивировано из оригинала 20 апреля 2016 г.
  3. ^ «Функция GetProductInfo (sysinfoapi.h)» . Корпорация Майкрософт. 2 февраля 2023 г. Проверено 15 июля 2023 г.
  4. ^ «MSDN — об условных комментариях» . Архивировано из оригинала 23 апреля 2007 г. Проверено 3 января 2007 г.
  5. ^ «Действительные условные комментарии, выявленные на нижнем уровне | 456 Berea Street» . Архивировано из оригинала 19 августа 2014 г. Проверено 29 декабря 2007 г.
  6. ^ «Условная компиляция» . Корпорация Майкрософт. Архивировано из оригинала 6 сентября 2008 г. Проверено 29 декабря 2007 г.
  7. ^ «Условные переменные компиляции» . Корпорация Майкрософт. Архивировано из оригинала 17 октября 2012 г.
  8. ^ «Заявление @cc_on (JavaScript)» . Корпорация Майкрософт. Архивировано из оригинала 4 апреля 2016 г. Проверено 17 августа 2015 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d019f5e8466e23b66b12f418980881ba__1692836640
URL1:https://arc.ask3.ru/arc/aa/d0/ba/d019f5e8466e23b66b12f418980881ba.html
Заголовок, (Title) документа по адресу, URL1:
Conditional comment - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)