この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Salesforce アプリケーションコンテナについて

Salesforce Classic では、Visualforce がページ、要求、環境を「所有」します。つまり、Visualforce がアプリケーションのコンテナになります。他方 Salesforce アプリケーションおよび Lightning Experience では、Visualforce が、より大きな one.app コンテナ内の iframe の内側で実行されます。

Salesforce アプリケーションと Lightning Experience のコンテナは似ていますが、完全に同じではありません。Salesforce アプリケーションと Lightning Experience のコンテナは両方とも one.app コンテナから派生し、一方のコンテナ用に記述されたコードは他方でも機能します。ただし、コンテナのバックグランド処理は若干異なります。Salesforce アプリケーションはモバイルデバイスのモバイルブラウザで動作する一方、Lightning Experience アプリケーションはデスクトップマシンの標準デスクトップブラウザで動作します。各コンテキストに送信される one.app のバージョンは最適化され、そのバージョンが実行されるブラウザ環境も明らかに異なります。つまり、それぞれがほぼ同じ機能を備えた異なるコンテナとして処理されます。

メモ

外側のコンテナと内側の iframe

外側の Salesforce アプリケーションコンテナは、/one/one.app URL でアクセスする単一ページアプリケーションです。one.app ページが読み込まれ、そのコードが開始され、アプリケーションコードが環境を取り仕切ります。

Visualforce ページは HTML iframe 内で実行され、iframe によってメインの one.app 参照コンテキストとは異なるブラウザウィンドウが作成されます。

Salesforce アプリケーションは親コンテキスト、Visualforce ページは子コンテキストです。つまり、Visualforce ページは外側の one.app コンテナの制約を受けますが、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 アプリケーションは提供されるドメインが異なるため、親ブラウザコンテキストへのアクセスに contentWindowwindow.parent などの要素は使用しないでください。
  • Visualforce の iframe は window.location に直接アクセスできないため、window.location は直接設定しないでください。
  • link = '/' + accountId + '/e' のような静的パターンで作成された Salesforce リソースへのハードコードされた URL は使用しないでください。代わりに、Visualforce マークアップでは {!URLFOR($Action.Contact.Edit, recordId)} を使用し、JavaScript では navigateToSObject(recordId) を使用します。