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