Referencing Untrusted Third-Party Content with iframes
It’s a good idea to isolate static resources downloaded from an untrusted source. You can use an iframe to separate third-party content from your Visualforce page to provide an extra layer of security and help you protect your assets.
To reference a static HTML file on a separate domain, use $IFrameResource.<resource_name> as a merge field, where resource_name is the name you specified when you uploaded the resource. For example:
<apex:iframe src="{!$IFrameResource.TestHtml}" id ="theiframe" width="500" height="500"/>
The iframe tag injects JavaScript into both the parent document and the child iframe to establish a secure communication between the two elements. The parent document can have multiple iframes. Each uniquely named static resource lives in its own subdomain of force-user-content.com.
Access to an iframe is not authenticated, so any third-party content it contains can’t access a user’s session ID.
Communicating with the iframe in the Parent Document
You can write JavaScript code in the parent document to communicate with the iframe.
- To send a message to
theiframe:
SfdcApp.iframe.sendMessage('theiframe', { key1: value1, key2: value2 });
- To receive messages from
theiframe:
SfdcApp.iframe.addMessageHandler('theiframe', function(data) { if(data.key1) { … } });
- To catch an error from
theiframe:
SfdcApp.iframe.addErrorHandler('theiframe', function(error) { console.log(error); });
Communicating with the Parent Document in the iframe
You can also communicate the other way from the iframe document.
- To send a message to the parent
document:
LCC.onlineSupport.sendMessage('containerUserMessage', { key1: value1, key2: value2 });
- To set up a handler to receive messages from the parent
document:
LCC.onlineSupport.addMessageHandler(function(message) { if(data.key1) { … } });
To remove this handler:
LCC.onlineSupport.removeMessageHandler(function)
- To set up a handler for message errors from the parent
document:
LCC.onlineSupport.addMessageErrorHandler(function(message) { if(data.key1) { … } });
To remove this handler:
LCC.onlineSupport.removeMessageErrorHandler(function)
- To set up a handler for other types of
errors:
LCC.onlineSupport.addErrorHandler(function(message) { if(data.key1) { … } });
To remove this handler:
LCC.onlineSupport.removeErrorHandler(function)