XFA JavaScript イベントスコープ

ユニット: HPDFXFAEventScript、HPDFXFARuntime 経由で統合

名前付きエイリアスとローカル宣言

イベントホストは、対象となる名前付きフォームノードを外側のイベントスコープへ解決します。input がアクセス可能な名前付きフィールドなら、イベントは引き続き input.rawValue を使えます

ユーザーイベント本体は独自の JavaScript 関数スコープを持つため、const、let、class 宣言がホスト生成の変数宣言と衝突せずにフィールドエイリアスをシャドーできます

const input = xfa.resolveNode("main.input");
input.rawValue = "saved";

ローカルの var と function 宣言も通常の JavaScript スコープ規則に従います。明示的なローカルバインディングは外側のエイリアスをシャドーし、レキシカルバインディングは初期化前には使えません

ホスト予約名と無効な識別子は、自動フィールドエイリアスの対象から引き続き除外されます。それらの名前には xfa.resolveNode が明示的なルックアップを提供します

実行コンテキストと strict モード

イベント本体の this は実行中のフォームノードのままで、明示的な戻り値は引き続き calculate/validate の完了処理へ流れます

先頭の use strict ディレクティブは、ユーザー本体のディレクティブとして扱われるようになりました。未宣言変数への代入は、グローバルバインディングを作る代わりに例外を投げます

"use strict";
const local = "value";
xfa.resolveNode("main.input").rawValue = local;

トランザクションとライフタイム

構文エラー、TDZ(temporal dead zone)の ReferenceError、strict モードの ReferenceError はイベントを中止し、ランタイムエラー前に実行された書き込みを含めて、ネイティブ form/datasets スナップショットを復元します

成功したネイティブ書き込みは、保存済み XDP の再読み込みを越えて生き残ります。ローカルイベント変数はその呼び出しに属し、variables スクリプトオブジェクトは確立済みの永続レキシカル状態とクロージャー動作を保ちます

ネストしたスコープはホストトランスポート呼び出しを追加せず、スクリプト・メモリー・操作・リプレイの各予算も変えません

関連 API

HPDFXFAExecuteJavaScriptEvent、インタラクティブ XFA ランタイム、ネイティブ欠落プロパティ生成