Обмежене середовище виконання QuickJS
HPDFQuickJS та HPDFQuickJSStatic надають той самий контрольований застосунком API оцінки JavaScript на Win32 та Win64
Оберіть режим розгортання
HPDFQuickJSзавантажує нейтральний до ABI містquickjs.dllі тримає значення QuickJS у C-кодіHPDFQuickJSStaticзв'язує платформозалежні об'єкти OMF у застосунок і не потребує DLL-бібліотеки під час виконання- Не включайте обидва модулі в одну програму, оскільки вони публікують однакові назви публічних типів
Зв'язування 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 вшановують запитане значення безпосередньо
Межі пам'яті та стека діють на рівні всього середовища, тоді як межі скрипта, часу та переривання застосовуються до кожного обчислення
Статус і відновлення
qjsSuccessзвітує перетворений результатqjsScriptErrorзвітує синтаксичні помилки, кинуті значення та збої перетворенняqjsTimeLimitтаqjsInterruptLimitрозрізняють два бюджети виконанняqjsBusy,qjsInvalidArgument,qjsResourceErrorтаqjsUnavailableзберігають збої інфраструктури
Відхилене або перерване обчислення очищає своє відкладене виключення та буфери, тому той самий екземпляр рушія може виконати пізніший дійсний скрипт
Один екземпляр рушія не є повторно вхідним; використовуйте один екземпляр на один одночасний робітник
Скриптинг форм 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