На практике вы можете обнаружить, что большинство несовместимостей, кото_ рые необходимо учитывать при разработке клиентских сценариев, обусловлены спецификой броузера IE. Вследствие этого иногда возникает необходимость соз_
278 Глава 13. JavaScript в веб*броузерах
давать программный код отдельно для IE и отдельно для всех остальных броузе_ ров. Хотя обычно нужно стараться избегать применения нестандартных расши_ рений, присущих конкретному типу броузера, броузер IE поддерживает возмож_ ность создания условных комментариев в JavaScript_коде, что может оказаться полезным.
В следующем примере демонстрируется, как выглядят условные комментарии в HTML. Примечательно, что вся хитрость заключается в комбинации симво_ лов, закрывающих комментарий.
<!__[if IE]>
Эти строки фактически находятся внутри HTML_комментария. Они будут отображаться только в IE.
<![endif]__>
<!__[if gte IE 6]>
Эта строка будет отображена только в IE 6 или более поздних версиях. <![endif]__>
<!__[if !IE]> <__>
Это обычное HTML_содержимое, но IE не будет отображать его из_за комментариев, что расположены выше и ниже.
<!__> <![endif]__>
Это обычное содержимое, которое будет отображаться всеми броузерами.
Условные комментарии также поддерживаются интерпретатором JavaScript в IE, а программисты, знакомые с языком C/C++, найдут их похожими на инструк_ ции препроцессора #ifdef/#endif. Условные JavaScript_комментарии в IE начи_ наются с комбинации символов /*@cc_on и завершаются комбинацией @*/. (Пре_ фиксы «cc» и «cc_on» происходят от фразы «condition compilation», т. е. «услов_ ная компиляция».) Следующий условный комментарий содержит программный код, который может быть исполнен только в IE:
/*@cc_on
@if (@_jscript)
// Следующий код находится внутри JS_комментария, но IE исполнит его. alert("In IE");
@end
@*/
Внутри условных комментариев могут указываться ключевые слова @if, @else и @end, предназначенные для отделения программного кода, который должен ис_ полняться интерпретатором JavaScript в IE по определенному условию. В боль_ шинстве случаев вам достаточно будет использовать показанное в предыдущем фрагменте условие @if (@_jscript). JScript – это название интерпретатора Java_ Script, которое было дано ему в Microsoft, а переменная @_jscript в IE всегда имеет значение true.
При грамотном чередовании условных и обычных JavaScript_комментариев мож_ но определить, какой блок программного кода должен исполняться в IE, а какой во всех остальных броузерах:
/*@cc_on
@if (@_jscript)
13.7. Доступность
// Этот блок кода находится внутри условного комментария,
// который также является обычным JavaScript_комментарием. В IE этот блок
// будет выполнен, а в других броузерах _ нет.
alert('Вы пользуетесь Internet Explorer'); @else*/
// Этот блок уже не находится внутри JavaScript_комментария, но по_прежнему
// находится внутри условного комментария IE. Вследствие этого данный
// блок кода будет выполнен всеми броузерами, за исключением IE.
alert('Вы не пользуетесь Internet Explorer'); /*@end
@*/
Условные комментарии в HTML и JavaScript совершенно не стандартизованы, но иногда они могут оказаться полезными в обеспечении совместимости с IE.