This Iframe-Resizer wrapper is a react component which embeds an SPA in an Iframe. It responsively resizes the height of the Iframe and its displayed content. It can be used to render websites within an iFrame whose size changes dynamically.
This container service currently covers the following features:
- IframeResizer gets height from SPA via PostMessage
- Responsive resizing
- Unit-Tests
- Integration testing
Your SPA needs to be able to send its height to the parent window via postMessage whenever it's size changes, and you will need to implement this functionality yourself. ForExample:
function onResize() {
if (document.referrer) {
const height = document.body.clientHeight;
window.parent.postMessage({ height: height }, document.referrer);
}
}
The IframeResizer will listen for these messages and behave accordingly.
If your SPA is also written in React, you would probably implement this in a componentDidUpdate()
function.
- In your parent, where you want to display the Iframe : Update your package.json and add the Iframe-Resizer to the dependencies:
"@rio-cloud/iframe-resizer": "0.0.1"
-
Execute npm install
-
Add the in your parentApplication.js with the URL of the SPA you want to display in it and add it to the rendering.
import IframeResizer from '@rio-cloud/iframe-resizer';
const myGreatApp = <IframeResizer url={"https://myToBeDisplayedSPA_URL/"}/>
To start the demo app locally, first run npm run start-demo
then run npm run start
in a separate terminal.
iframe-resizer is licensed under the Apache 2.0 license.