Salesforce アプリケーションコンテナについて
外側のコンテナと内側の iframe
外側の Salesforce アプリケーションコンテナは、/lightning URL でアクセスする単一ページアプリケーションです。/lightning ページが読み込まれ、そのコードが開始され、アプリケーションコードが環境を取り仕切ります。
Visualforce ページは HTML iframe 内で実行され、iframe によってメインの /lightning 参照コンテキストとは異なるブラウザウィンドウが作成されます。
Salesforce アプリケーションは親コンテキスト、Visualforce ページは子コンテキストです。つまり、Visualforce ページは外側の /lightning コンテナの制約を受けますが、iframe のコンテキストに分離されています。
Salesforce アプリケーションの Visualforce コードの考慮事項
可能な場合は、ユーザインターフェースのコンテキストに関係なく正常に動作する Visualforce ページを作成します。通常、Salesforce Classic 用に記述された Visualforce コードは Salesforce アプリケーションでも機能します。ただし特定の状況では、コンテナに対応させるために Visualforce ページをモバイル用にいくつか変更する必要があります。
セキュリティに関する考慮事項
次のセキュリティ要素が影響を受ける可能性があります。
- セッションのメンテナンスおよび更新
- 認証
- クロスドメイン要求
- 埋め込みの制限
特に、セッションのメンテナンス、またはすべての要求でユーザ名とパスワードを入力する代わりにブラウザが使用するトークンの管理に注意してください。多くの場合、$Api.Session_ID グローバル変数を使用して現在のセッションにアクセスする必要があります。要求のドメインに応じて、$Api.Session_ID は異なる値を返し、Salesforce アプリケーションと Visualforce ページは提供されるドメインが異なります。Visualforce の iframe の内側と外側のセッション ID は異なるため、Salesforce アプリケーションコンテナでは、セッション ID を管理する方法の変更が必要な場合があります。
範囲の考慮事項
次の範囲要素は、調整が必要な可能性があります。
- DOM へのアクセスおよび変更
- JavaScript の範囲、表示、アクセス
- JavaScript のグローバル変数 (window.location など)
簡単に言うと、Visualforce ページの JavaScript コードは iframe のブラウザコンテキスト内の要素にのみ影響し、親のコンテキストには影響しません。
Salesforce アプリケーションコンテナで避けるべき機能
Salesforce アプリケーションコンテナでは、Salesforce アプリケーションの一部の Visualforce コンポーネントが機能しません。
- Salesforce アプリケーションコンテナ内の Visualforce ページで <apex:iframe> は使用しないでください。このタグは、iframe とその DOM および JavaScript への影響を完全に理解している場合にのみ使用します。
- Visualforce と Salesforce アプリケーションは提供されるドメインが異なるため、親ブラウザコンテキストへのアクセスに contentWindow や window.parent などの要素は使用しないでください。
- Visualforce の iframe は window.location に直接アクセスできないため、window.location は直接設定しないでください。
- link = '/' + accountId + '/e' のような静的パターンで作成された Salesforce リソースへのハードコードされた URL は使用しないでください。代わりに、Visualforce マークアップでは {!URLFOR($Action.Contact.Edit, recordId)} を使用し、JavaScript では navigateToSObject(recordId) を使用します。