iframe を使用した信頼されないサードパーティコンテンツの参照
信頼されない供給元からダウンロードした静的リソースは分離することをお勧めします。iframe を使用してサードパーティコンテンツを Visualforce ページから切り離すことで、セキュリティを強化し、アセットを保護できます。
別個のドメインの静的 HTML ファイルを参照するには、差し込み項目として $IFrameResource.<resource_name> を使用します。このとき、resource_name は、リソースをアップロードしたときに指定した名前です。次に例を示します。
1<apex:iframe src="{!$IFrameResource.TestHtml}" id ="theiframe" width="500" height="500"/>iframe タグは JavaScript を親ドキュメントと子 iframe の両方に挿入し、その 2 つの要素間で安全な通信が確立されます。親ドキュメントは、複数の iframe を持つことができます。一意の名前が付けられた各静的リソースは、forceusercontent.com の独自のサブドメインに存在します。
iframe へのアクセスは認証されないため、iframe に含まれるサードパーティコンテンツはユーザのセッション ID にアクセスできません。
親ドキュメントでの iframe との通信
親ドキュメントで JavaScript コードを記述して iframe と通信することができます。
- theiframe にメッセージを送信する場合
1SfdcApp.iframe.sendMessage('theiframe', { 2 key1: value1, 3 key2: value2 4}); - theiframe からメッセージを受信する場合
1SfdcApp.iframe.addMessageHandler('theiframe', function(data) { 2 if(data.key1) { 3 … 4 } 5}); - theiframe からのエラーをキャッチする場合
1SfdcApp.iframe.addErrorHandler('theiframe', function(error) { 2 console.log(error); 3});
iframe での親ドキュメントとの通信
反対に、iframe ドキュメントから通信を行うこともできます。
- 親ドキュメントにメッセージを送信する場合
1LCC.onlineSupport.sendMessage('containerUserMessage', { 2 key1: value1, 3 key2: value2 4}); - 親ドキュメントからメッセージを受信するハンドラを設定する場合
1LCC.onlineSupport.addMessageHandler(function(message) { 2 if(data.key1) { 3 … 4 } 5});このハンドラを削除する場合
1LCC.onlineSupport.removeMessageHandler(function) - 親ドキュメントからのメッセージエラーのハンドラを設定する場合
1LCC.onlineSupport.addMessageErrorHandler(function(message) { 2 if(data.key1) { 3 … 4 } 5});このハンドラを削除する場合
1LCC.onlineSupport.removeMessageErrorHandler(function) - その他の種類のエラーのハンドラを設定する場合
1LCC.onlineSupport.addErrorHandler(function(message) { 2 if(data.key1) { 3 … 4 } 5});このハンドラを削除する場合
1LCC.onlineSupport.removeErrorHandler(function)