Определение возможностей браузера

Хотя обозреватели поддерживают большинство функций JScript, новые функции, связанные с платформой .NET Framework, основанными на классах объектами, типами данных, перечислениями, директивами условной компиляции и оператором const, поддерживаются только на сервере. Поэтому эти функции следует использовать исключительно в серверных скриптах. Дополнительные сведения см. в разделе Сведения о версиях JScript.

Скрипт JScript может определить возможности обработчика, который интерпретирует или компилирует его. Это не требуется при написании кода для серверного приложения (предназначенного для запуска в ASP или ASP.NET) или программы командной строки, так как в этих случаях можно легко определить поддерживаемую версию JScript и код. Однако при запуске клиентских скриптов в обозревателе эта функция очень важна, так как она позволяет обеспечить совместимость скрипта с обработчиком JScript в обозревателе.

Существует два способа проверки совместимости JScript: с помощью функций обработчика скриптов или с помощью условной компиляции. Ниже перечислены преимущества обоих этих способов.

Функции обработчика скриптов

Функции обработчика скриптов (ScriptEngine, ScriptEngineBuildVersion, ScriptEngineMajorVersion, ScriptEngineMinorVersion) возвращают сведения о текущей версии обработчика сценариев. Дополнительные сведения см. в разделе Функции (Visual Studio — JScript).

Для наиболее полной совместимости на странице, проверяющей поддерживаемые версии JScript, должны использоваться только функции, доступные в JScript версии 1. Если обработчик поддерживает версию JScript, выпущенную после версии 1.0, можно выполнить переход на другую страницу, которая поддерживает расширенные функции. Это значит, что для каждой версии JScript, которая должна поддерживаться, необходимо иметь отдельную версию веб-страницы. В большинстве ситуаций наиболее эффективным решением является использование только двух страниц: одной для определенной версии JScript, а другой для работы без JScript.

Примечание

Код JScript, в котором используются расширенные функции, необходимо размещать на отдельной странице, которая не выполняется в обозревателях с несовместимыми обработчиками.Это требование является обязательным, так как обработчик скриптов в обозревателе интерпретирует весь код JScript, содержащийся на странице.В старых версиях обработчиков нельзя использовать оператор if…else для переключения между блоком кода, использующим самую новую версию JScript, и блоком кода JScript версии 1.

В следующем примере показано использование функций обработчика скриптов. Поскольку данные функции впервые появились в JScript версии 2.0, то перед их использованием необходимо определить, поддерживает ли их обработчик. Если обработчик поддерживает только JScript версии 1.0 или не распознает JScript, оператор typeof возвратит строку "не определен" для каждого имени функции.

if("undefined" == typeof ScriptEngine) {
   // This code is run if the script engine does not support
   // the script engine functions.
   var version = 1;
} else {
   var version = ScriptEngineMajorVersion();
}
// Display the version of the script engine.
alert("Engine supports JScript version " + version);
// Use the version information to choose a page.
if(version >= 5) {
   // Send engines compatible with JScript 5.0 and better to one page.
   var newPage = "webpageV5.htm";
} else {
   // Send engines that do not interpret JScript 5.0 to another page.
   var newPage = "webpagePre5.htm";
}
location.replace(newPage);

Условная компиляция

Переменные и операторы условной компиляции позволяют скрыть код JScript от обработчика, не поддерживающего условную компиляцию. Такой подход удобно использовать, когда требуется включить небольшой объем дополнительного кода непосредственно в веб-страницу.

Примечание

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

<script>
/*@cc_on
@if(@_jscript_version >= 5 )
// Can use JScript Version 5 features such as the for...in statement.
// Initialize an object with an object literal.
var obj = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"};
var key;
// Iterate the properties.
for (key in obj) {
   document.write("The "+key+" property has value "+obj[key]+".<BR>");
}
@else 
@*/
alert("Engine cannot interpret JScript Version 5 code.");
//@end
</script>

Если блок условия @if содержит большой объем кода, удобнее будет воспользоваться описанным выше методом с использованием функций обработчика скриптов.

См. также

Основные понятия

Сведения о версиях JScript

Другие ресурсы

Создание, компиляция и отладка кода JScript

Функции (Visual Studio — JScript)

Условная компиляция