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