Применяем Conditional Compilation JScript/JavaScript в IE

Начиная с версии IE 4+ появилась директива условного компилирования (СС). С ее помощью можно исполнять JScript/JavaScript код в зависимости от версии IE, а можно приспособить и для других браузеров.

Обзор синтаксиса

Включить условное компилирование, можно использовав диррективу @cc_on внутри вашего скрипта, или напрямую используя @if или @set выражения. Например:

<script type="text/javascript"> /*@cc_on document.write("Версия JScript: " + @_jscript_version + ".<br>"); /*@if (@_jscript_version >= 5) document.write("Версия JScript 5.0 или выше.<br />"); document.write("Ваш браузер поддерживает JScript 5+<br>"); @else @*/ document.write("У вас другой браузер (Firefox, IE 4.x ...)"); /*@end @*/ </script>

Если вы используете IE любой версии, то обязательно увидите первый document.write(), если версию 5 и выше, то первых два document.write(), если ваша версия браузера отлична от IE 5+, например Firefox, Opera, IE 4.0, то вы увидите последний document.write().

Выражения @if, @elif, @else и @end

Вот список выражений, которые вы можете использовать при условном компилировании:

  • @if
  • @elif
  • @else
  • @end
Давайте рассмотрим несколько необычных примеров:

if else логика (только для IE)

<script type="text/javascript"> /*@cc_on @if (@_win32) document.write("32-bit система. Браузер - IE."); @else document.write("не 32-bit система. Браузер - IE."); @end @*/ </script>

Этот пример работает только в Internet Explorer и сообщение, которое он вам выведет зависит от разрядности вашей операционной системы. Сравните его со следующим примером:

if else логика (IE и другие браузеры)

<script type="text/javascript"> /*@cc_on /*@if (@_win32) document.write("32-bit система. Браузер - IE."); @else @*/ document.write("Браузер не IE (м.б. Firefox) браузер не 32-bit IE."); /*@end @*/ </script>

Манипулируя комментариями, мы заставили скрипт работать в других браузерах и в не 32-bit IE. Давайте теперь возьмем IE под полный контроль ;-)

if, elseif, else логика (только для IE)

<script type="text/javascript"> /*@cc_on @if (@_jscript_version >= 5) document.write("Браузер IE с поддержкой JScript 5+"); @elif (@_jscript_version >= 4) document.write("Браузер IE с поддержкой JScript 4+"); @else document.write("У вас очень старая версия IE"); @end @*/ </script>

if, elseif, else логика (IE и другие браузеры)

<script type="text/javascript"> /*@cc_on /*@if (@_jscript_version >= 5) document.write("Браузер IE с поддержкой JScript 5+"); @elif (@_jscript_version >= 4) document.write("Браузер IE с поддержкой JScript 4+"); @else @*/ document.write("Браузер не IE (не поддерживает JScript)"); /*@end @*/ </script>

Ну и тоже самое, только с поддержкой не IE браузеров (как известно JScript присутствует только в IE, в других браузерах - JavaScript)

CC, try catch выражение и кроссбраузерный Ajax

Перейдем от теории к практике и используем новые знания для построения более полезного примера, а именно создадим скрипт, для кроссбраузерного ajax обьекта:

<script type="text/javascript"> function HttpRequest(url, parameters){ var pageRequest = false //variable to hold ajax object /*@cc_on @if (@_jscript_version >= 5) try { pageRequest = new ActiveXObject("Msxml2.XMLHTTP") } catch (e){ try { pageRequest = new ActiveXObject("Microsoft.XMLHTTP") } catch (e2){ pageRequest = false } } @end @*/ if (!pageRequest && typeof XMLHttpRequest != 'undefined') pageRequest = new XMLHttpRequest() } </script>
Поделись с друзьями: