JavaScript の厳格モードの適用
DOM のアクセスコンテインメント
セキュアなラッパー
Lightning Locker による eval() 関数の制限
許可される MIME タイプ
サードパーティ Web コンポーネントと Lightning Locker
Salesforce のグローバル変数
サポートされていないブラウザ
子コンポーネントに渡される配列
Lightning Locker ツール
組織の Locker API バージョンの選択
Lightning Locker では、コードを動的に評価するサードパーティライブラリを使用できるように eval() 関数の使用がサポートされます。ただし、これは名前空間のグローバル範囲でのみ適用されるように制限されます。eval() 関数は、コールされた範囲内のローカル変数にアクセスできません。
通常、eval() には 2 つの実行モードがあります。eval() を直接呼び出すと、ローカル範囲で機能します。参照経由で呼び出すと、グローバル範囲で機能します。Lightning Locker は後者のみをサポートします。
たとえば、次のコードを実行するとします。
1window.foo = 1;
2function bar() {
3 var foo = 2;
4 return eval("foo");
5}bar() をコールすると、評価がローカル範囲で実行された場合は 2 が返され、グローバル範囲で実行された場合は 1 が返されます。ローカル範囲から変数を使用する必要がある場合は、コードをリファクタリングします。Function() を使用し、ローカル変数をパラメータとして宣言し、それを引数として渡し、return ステートメントを追加します。
1window.foo = 1;
2function bar() {
3 var foo = 2;
4 return Function("foo", "return foo")(foo);
5}Lightning Web Security では、コードがサンドボックスで実行されるため eval() がグローバル範囲に制限されません。ただし、ローカル範囲で eval() を直接起動することは、やはりお勧めできません。
Tip
The Japanese Summer '24 guide is now live