Книга: JavaScript. Подробное руководство, 6-е издание

13.4.6. Условные комментарии в Internet Explorer

13.4.6. Условные комментарии в Internet Explorer

На практике вы можете обнаружить, что большинство несовместимостей, которые необходимо учитывать при разработке клиентских сценариев, обусловлены спецификой броузера IE. Вследствие этого иногда возникает необходимость создавать программный код отдельно для IE и отдельно для всех остальных броузеров. Броузер IE поддерживает нестандартную возможность создания условных комментариев (эта возможность появилась в IE5) в JavaScript-коде, что может оказаться полезным для решения проблем несовместимости.

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

<!—[if IE 6]>
  Эти строки фактически находятся внутри HTML-комментария.
  Они будут отображаться только в IE6.
<![endif]-->
<!—[if lte IE 7]>
  Эта строка будет отображена только в IE 5. 6, 7 и в более ранних версиях.
  lte обозначает "less than or equal" (меньше или равно). Можно также использовать "It”,
  "gt" и "gte”.
<![endif]-->
<! —[if ! IE]> <->
  Это обычное HTML-содержимое, но IE не будет отображать его из-за комментариев, что расположены выше и ниже.
<!--> <![endif]-->
Это обычное содержимое, которое будет отображаться всеми броузерами.

В качестве более конкретного примера возьмем библиотеку excanvas.js, о которой выше говорилось, что она реализует поддержку элемента <canvas> в Internet Explorer. Поскольку эта библиотека требуется, только когда веб-страница отображается в IE (и работает только в IE), есть смысл оформлять ее подключение внутри условного комментария, чтобы другие броузеры даже не загружали ее:

<!--[if IE]><script src="excanvas.js"></script><![endif]-->

Условные комментарии также поддерживаются интерпретатором JavaScript в IE. Программисты, знакомые с языком C/C++, найдут их похожими на инструкции препроцессора #ifdef/#endif. Условные JavaScript-комментарии в IE начинаются с комбинации символов /*@сс_оп и завершаются комбинацией @*/. (Префиксы «сс» и «сс_оп» происходят от фразы «condition compilation», т. е. «условная компиляция».) Следующий условный комментарий содержит программный код, который будет выполняться только в IE:

/*@сс_оn
  @if (@_jscript)
    // Следующий код находится внутри JS-комментария, но IE выполнит его.
    alert("In IE”);
  @end
@*/

Внутри условных комментариев могут указываться ключевые слова @if, @else и @end, предназначенные для отделения программного кода, который должен выполняться интерпретатором JavaScript в IE по определенному условию. В большинстве случаев вам достаточно будет использовать показанное в предыдущем фрагменте условие @if (@_jscript).JScript- это название интерпретатора JavaScript, которое было дано ему в Microsoft, а переменная @_jscript в IE всегда имеет значение true.

При грамотном чередовании условных и обычных JavaScript-комментариев можно определить, какой блок программного кода должен выполняться в IE, а какой -во всех остальных броузерах:

/*@сс_оп
  @if (@_jscript)
    // Этот блок кода находится внутри условного комментария,
    // который также является обычным JavaScript-комментарием.
    // В IE этот блок будет выполнен, а в других броузерах - нет.
    alert('Bы пользуетесь Internet Explorer');
  @else*/
    // Этот блок уже не находится внутри JavaScript-комментария,
    // но по-прежнему находится внутри условного комментария IE.
    // Вследствие этого данный блок кода будет выполнен всеми броузерами, кроме IE.
    alert(*Bы не пользуетесь Internet Explorer');
  /*@end
@*/

Оглавление книги


Генерация: 3.705. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз