Обмежене середовище виконання QuickJS

HPDFQuickJS та HPDFQuickJSStatic надають той самий контрольований застосунком API оцінки JavaScript на Win32 та Win64

Оберіть режим розгортання

Зв'язування DLL приймає явний шлях, значення середовища HOTPDF_QUICKJS_DLL або каталог платформи, знайдений нижче предка виконуваного файла

Типові збірки розміщують міст у Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll або Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll

Оцініть скрипт

uses
  HPDFQuickJS;

var
  Engine: THPDFQuickJS;
  EvalResult: THPDFQuickJSResult;
begin
  Engine := THPDFQuickJS.Create;
  try
    if not Engine.Available then
      raise Exception.Create(Engine.LoadError);
    EvalResult := Engine.Eval('JSON.stringify([1, 2, 3].map(x => x * 2))');
    if not EvalResult.Success then
      raise Exception.Create(EvalResult.Error);
  finally
    Engine.Free;
  end;
end;

Eval перетворює фінальне значення JavaScript у текст UTF-8 і зберігає Unicode під час повернення рядка Delphi

EvalInt та EvalFloat додають строге числове перетворення без винесення значень рушія через межу ABI

Межі виконання

Limits := THPDFQuickJSLimits.CreateDefault;
Limits.MemoryBytes := 32 * 1024 * 1024;
Limits.StackBytes := 64 * 1024;
Limits.MaxScriptBytes := 256 * 1024;
Limits.TimeoutMs := 250;
Limits.MaxInterruptChecks := 250000;
Engine := THPDFQuickJS.Create(Limits);

Типові значення дозволяють 64 МБ пам'яті рушія, стек 64 КБ, скрипт UTF-8 до 1 МБ, одну секунду стінового часу та один мільйон перевірок переривання

Статичне середовище Win32 затискає нульовий чи більший запитаний бюджет стека на 48 КБ, щоб залишитися в безпечній для компілятора межі рекурсії; режими DLL та Win64 вшановують запитане значення безпосередньо

Межі пам'яті та стека діють на рівні всього середовища, тоді як межі скрипта, часу та переривання застосовуються до кожного обчислення

Статус і відновлення

Відхилене або перерване обчислення очищає своє відкладене виключення та буфери, тому той самий екземпляр рушія може виконати пізніший дійсний скрипт

Один екземпляр рушія не є повторно вхідним; використовуйте один екземпляр на один одночасний робітник

Скриптинг форм XFA

Рушій спрощення XFA повторно використовує це середовище лише тоді, коли THotPDF.XFAJavaScriptEnabled явно встановлений; він надає обмежений фасад даних, рідні типізовані масиви, перевірені запити екземплярів і жодних об'єктів файлу, процесу, браузера чи мережі

TXFAFormScriptOptions.JavaScriptEvaluator може адаптувати статичне середовище, не нав'язуючи статичні об'єкти QuickJS кожному застосунку HotPDF

Дивіться Обмежена мова FormCalc і JavaScript XFA

Відтворювана збірка середовища

powershell -ExecutionPolicy Bypass -File Lib\thirdparty\build-quickjs-runtime.ps1

Скрипт збірки виробляє обидва набори статичних об'єктів та обидві DLL-бібліотеки моста з вбудованого джерела, після чого матриця середовища компілює та перевіряє статичні та DLL-проби для Win32 і Win64