Условный комментарий
Условные комментарии — это условные операторы , интерпретируемые 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]
См. также
[ редактировать ]Внешние ссылки
[ редактировать ]Ссылки
[ редактировать ]- ^ «Об условных комментариях» . Корпорация Майкрософт. Архивировано из оригинала 13 октября 2008 г. Проверено 24 октября 2007 г.
- ^ «Парсинг HTML5 в IE10» . Корпорация Майкрософт. 06.07.2011. Архивировано из оригинала 20 апреля 2016 г.
- ^ «Функция GetProductInfo (sysinfoapi.h)» . Корпорация Майкрософт. 2 февраля 2023 г. Проверено 15 июля 2023 г.
- ^ «MSDN — об условных комментариях» . Архивировано из оригинала 23 апреля 2007 г. Проверено 3 января 2007 г.
- ^ «Действительные условные комментарии, выявленные на нижнем уровне | 456 Berea Street» . Архивировано из оригинала 19 августа 2014 г. Проверено 29 декабря 2007 г.
- ^ «Условная компиляция» . Корпорация Майкрософт. Архивировано из оригинала 6 сентября 2008 г. Проверено 29 декабря 2007 г.
- ^ «Условные переменные компиляции» . Корпорация Майкрософт. Архивировано из оригинала 17 октября 2012 г.
- ^ «Заявление @cc_on (JavaScript)» . Корпорация Майкрософт. Архивировано из оригинала 4 апреля 2016 г. Проверено 17 августа 2015 г.