ScriptParser: открытый компонент для анализа и выполнения JavaScript в среде .NET
ScriptParser — это открытый компонент, который позволяет анализировать и выполнять JavaScript-код в среде .NET. Он предназначен для следующих целей:
Поддерживаемые синтаксические конструкции
В настоящее время поддерживается синтаксис ECMAScript 5, за исключением with-синтаксиса и Property. Также поддерживаются следующие типы данных: Object, Array, Number, String, Date, а также методы parseInt, parseFloat, stringify и eval. Для работы с шаблонами поддерживаются выражения for...of, стрелочные функции, let и const. Кроме того, ScriptParser поддерживает доступ к DataTable и позволяет разработчикам добавлять классы, объекты и методы, которые должны вызываться из JavaScript.
Из-за особенностей объектов JavaScript все объекты, методы и свойства, передаваемые в JavaScript, должны быть преобразованы в объекты, наследуемые от IScriptObject. В среде .NET объекты преобразуются в ScriptType, ScriptNativeObject, ScriptNativeArray или ScriptNativeFunction перед вызовом из JavaScript.
Процесс анализа и выполнения использует структуру памяти для имитации стека потоков, что позволяет избежать проблем с вложенными конструкциями, которые могут привести к переполнению стека и аварийному завершению процесса.
Во время выполнения ScriptParser предоставляет возможность приостановить и продолжить выполнение, а при пакетном выполнении скриптов — реализовать функционал, подобный потокам. Метод ScriptContext.Pause сохраняет контекст и завершает выполнение метода Execute, после чего метод ScriptContext.Continue возобновляет выполнение. При выполнении длительных операций, таких как сетевые запросы, можно приостановить выполнение с помощью ScriptContext.Pause и возобновить его позже через ScriptContext.Continue.
Для демонстрации возможностей компонента предоставляется проект ScriptTest.
Пример использования компонента:
// Создание контекста выполнения: ScriptContext
ScriptContext context = new ScriptContext();
// Добавление переменных и методов
context.AddValue("inc", 100);
// Получение результата выполнения
object result = ScriptUtils.ExecuteScript(context, "var i = 0; return i + inc;");
Пример использования шаблона:
// Создание контекста выполнения: ScriptContext
ScriptContext context = new ScriptContext();
// Добавление переменных и методов
context.AddValue("status", 2);
string template = @"
Состояние:
<@switch code="status">
<@case code="1">@{"нормально"}</@case>
<@case code="2">@{"заморожено"}</@case>
<@default>другое состояние</@default>
</@switch>
";
string result = ScriptUtils.ExecuteTemplate(context, template);
Синтаксис шаблонов
Шаблоны ScriptParser представляют собой текст с особыми тегами, которые преобразуются в исполняемый JavaScript-код. Поддерживаются следующие теги:
<@else if="***"></@else>
.<do while="***"> </do>
.<@case code="***" />
или <@case code="***" ignoreBreak="true"></@case>
.<@line />
: используется для однострочных команд, добавляет «;» в конце.<@code>...</@code>
(<@>...</@>
): используется для произвольного JavaScript-кода, который будет сохранён без изменений.<@nowrap>...</@nowrap>
: используется для предотвращения переноса строк.Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )