HPDFXFAExecuteJavaScriptEvent

單元:HPDFXFAEventScript

宣告

function HPDFXFAExecuteJavaScriptEvent(const Script: AnsiString;
  const Bindings: TXFAEventBindings; SelfIndex: Integer;
  const Options: TXFAFormScriptOptions; out Actions: TXFAEventActions;
  out Operations: Integer; out Diagnostic: string;
  Session: TXFAJavaScriptSession= nil;
  HostTransaction: TXFAHostTransaction= nil;
  LocaleProvider: TXFALocaleDataProvider= nil;
  HostModel: PXFAHostModelState= nil): Boolean;

行為

對即時虛擬表單 DOM 執行事件,回傳已驗證的變更記錄,而不修改呼叫端的文件

Bindings 提供宿主 context,SelfIndex 選出 this;Options.EnableJavaScript 必須為 True

Script 與原始繫結文字是 UTF-8 位元組,JavaScript 原始碼與引號 context 會明確解碼,而不是按作業系統 ANSI 字碼頁解讀;希臘字母字面值、增補純量與 Unicode 行分隔字元都能保留精確值

使用隨附的受限 QuickJS 引擎或 Options.JavaScriptEvaluator,具備腳本、context、記憶體、堆疊、中斷、時間、操作與輸出預算

只有引擎執行與輸出驗證都成功才回傳 True;執行失敗會清空 Actions 並回報 Diagnostic

TXFAWidgetRuntime 在自己的快照交易內驗證並重播這些動作;直接呼叫端必須自行提供等效的交易式處理

原生引擎對每個 session 引擎只編譯一次可重用的事件支援程式碼,而每次呼叫都提供目前的繫結向量、事件本體、限制,以及已記錄的宿主、地區設定、計算與 XML 回應;分開的 session 與重複的 script object 保留各自獨立的狀態

支援初始化、事件執行、暫停重試與回復重建共用原始的經過時間期限;自訂 JavaScriptEvaluator callback 會收到完整的獨立 wrapper

傳入自己擁有的 TXFAJavaScriptSession 可跨呼叫保留 script object 與語彙狀態;session 為 nil 時會為該次呼叫建立隔離引擎

要產生明確的應用程式效果時,傳入自己擁有的 TXFAHostTransaction;暫停重試會還原 session 檢查點並消耗已記錄的回應,不會重複呼叫已完成的請求

低階呼叫端必須依文件的結果收尾宿主交易;宿主效果需要隨附引擎,不能使用 JavaScriptEvaluator

LocaleProvider 提供唯讀的地區設定中繼資料;nil 時使用 Windows 地區設定資料,TXFAWidgetRuntime 則提供目前文件的 localeSet 並帶系統後備

最近一個非空的 Locale 繫結提供環境地區設定;繼承到的地區設定為空時採用目前的使用者地區設定

計算出的地區設定名稱會暫停原生執行、還原 session 檢查點,再以已記錄的中繼資料重試;已提交的重播會消耗該中繼資料,不再呼叫 provider

每次呼叫最多允許 64 個具名地區設定請求、每個識別字 256 個 UTF-16 碼元與 2 MiB 地區設定中繼資料,共用腳本的經過時間期限;自訂 JavaScriptEvaluator callback 必須直接消耗提供的地區設定資料,不得再請求原生查詢

HostModel 提供應用程式中繼資料、頁面、旗標、標題與焦點的唯讀快照;nil 時使用 TXFAHostModelState.Default,回傳的 host/focus/reset 動作需要呼叫端以原生交易方式套用

動態 FormCalc Eval 會為原生編譯暫停,並在同一期限內以已記錄的編譯回應重試;自訂 JavaScriptEvaluator callback 無法服務這類請求

指標為同步讀取,絕不保留也不寫入;TXFAWidgetRuntime 傳入目前的狀態,並在其文件快照交易內套用變更

執行中繫結的 EventActivity 提供 xfa.event.name,低階時以 event 作為後備

即時 SOM 解析使用繫結階層與目前出現個體順序,支援類別與後代選擇器以及候選述詞,並在索引省略時選出單一推測或預設出現個體

Data DOM 繫結會建立 datasets 樹,透過 DataIdentity 連接表單值,支援資料寫入與保留的原生資料 handle;直接呼叫端必須以交易方式套用兩個域與虛擬識別動作

Property DOM 繫結公開已宣告的 property 子節點與 Attributes/DefaultAttributes;直接呼叫端必須把 property 原始值與屬性動作套用到對應的原生表單出現個體

具名欄位別名在外層事件範圍可見;區域 const、let、class、function 與 var 宣告在事件本體內遵循一般的 JavaScript 語彙規則

事件本體保留開頭的 use strict 指示、其表單節點 this context 與明確的回傳值;語彙或 strict 模式的失敗會拒絕同一個原生交易

遮蔽與持久化行為詳見JavaScript 事件範圍

相關 API

互動式動態 XFA Widget 執行環境、FormCalc 函式與XFA 封包 DOM