Lightning Locker は、すべての新規エクスペリエンスビルダーサイトではデフォルトで有効化されています。ただし、ページのサードパーティコンポーネントや head マークアップのカスタムコードが Lightning Locker との競合のために期待どおりに動作しないことがあります。そのような場合、ここに記載されているいずれかの回避策を使用することをお勧めします。
JavaScript カスタムイベントの使用
Lightning Locker は、head マークアップではなく、他の名前空間のリソースとのやりとりからサードパーティコンポーネントやカスタムコードを保護します。この制限は、Lightning Locker をバイパスしてセキュリティに脆弱性をもたらすカスタムコードを head マークアップに含めることができることを意味します。
この制限に対応するには、head マークアップで CustomEvent コンストラクタを使用して、サードパーティ Aura コンポーネント、Lightning Web コンポーネント、カスタムコードを分離します。これにより、サードパーティコンポーネントやカスタムコードは、そのリソースを直接読み込んだり参照したりせずにリソースとやりとりできます。
イベントを介してリスナーに渡される必要があるデータは、イベントの初期化時に作成される detail プロパティで渡されます。detail プロパティは、head マークアップリスナーの dataLayer に対応付けられます。これにより、EventTarget を拡張する任意のリソースにカスタムイベントがディスパッチされます。カスタムイベントの使用例については、「Adobe Analytics および Lightning Locker」を参照してください。
JavaScript CustomEvent コンストラクタで渡すデータに注意して、使用方法が安全であることを確認します。ページで実行される JavaScript (使用しているサードパーティ App Exchange コンポーネントなど) でイベント名がリスンされて、このデータが読み取られる可能性があります。
API 39.0 への Aura コンポーネントの設定
サードパーティコンポーネントやカスタムコードと Aura コン��ーネントのやりとりが期待どおりに行われない場合、Aura コンポーネントを Salesforce API バージョン 39.0 に設定します。これにより、コンポーネントの Lightning Locker が無効になります。
『Lightning Aura コンポーネント開発者ガイド』の
「コンポーネントの Lightning Locker の無効化」を参照してください。
Aura コンポーネントの Lightning Locker を無効にすると、サイトのセキュリティが低下し、設計時にコンポーネントを使用したり、実行時に表示したりできなくなる可能性があります。
一貫性を保ちデバッグを容易にするため、親 Aura コンポーネントと子コンポーネントの API バージョンが同じになるようにします。そのため、コンポーネント階層内で使用する Aura コンポーネント (コンポーネント内のコンポーネントや、別のコンポーネントを拡張するコンポーネントなど) を API バージョン 39.0 に設定しないでください。
Lightning Locker の無効化
この回避策は、最後の手段としてのみ使用してください。
サイトで Lightning Locker を無効にすると、
すべてのサイトのサードパーティコンポーネントとカスタムコードで無効になります。この影響は、広範囲で予想外の結果になる可能性があります (サイトのセキュリティの低下など)。サードパーティコンポーネントが
Lightning Locker なしで動作するように設定されていない場合、そのコンポーネントは設計時に使用したり、実行時に表示したりできない可能性があります。Lightning Locker が無効になっている場合、異なる名前空間のコンポーネントがやりとりしたり、お互いのドキュメントオブジェクトモデル (DOM) にアクセスしたり、サイトとやりとりするカスタムリソースに関する制限が緩和されたりします。
Lightning Locker の無効化についての詳細は、Salesforce ヘルプの「エクスペリエンスビルダーサイトでのセキュリティレベルの選択」を参照してください。