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 ヘルプの「エクスペリエンスビルダーサイトでのセキュリティレベルの選択」を参照してください。