A lightweight, efficient iframe resizing utility for Civic Auth applications.
The Civic Iframe Resizer is a two-part system:
-
Parent Component: A React component (
IframeResizer
) that wraps a standard iframe and listens for resize messages - Child Script: A script that runs inside the iframe content to measure and report size changes
import { IframeResizer } from "@civic/iframe-resizer";
function MyComponent() {
return (
<IframeResizer
src="https://example.com/content"
initialHeight="100px"
animate={true}
animationDuration={250}
onResizeHeight={(height) => console.log(`Iframe height changed to ${height}px`)}
checkOrigin={false}
allowedOrigins={["https://example.com"]}
// Additional standard iframe props
id="my-iframe"
title="Content Frame"
allow="camera"
allowFullScreen={true}
style={{ borderRadius: '8px' }}
/>
);
}
To enable resizing, the content loaded in the iframe must include the child script.
Add the following script tag to your iframe content's HTML:
<script src="https://your-cdn-or-path/iframe-resizer.child.js"></script>
import iframeResizerChild from "@civic/iframe-resizer/child";
// The script auto-initializes, but you can call init() explicitly if needed
iframeResizerChild.init();
// For advanced usage, you can create a custom instance with options
import { IframeResizerChild } from "@civic/iframe-resizer/child";
const myResizer = new IframeResizerChild({
targetElement: document.getElementById('content'),
checkInterval: 300,
debounceDelay: 100,
debug: true
});
myResizer.init();
- The child script measures the height of the content (default: document.body)
- When size changes are detected, the child sends a message to the parent
- The parent receives the message and adjusts the iframe height accordingly
The child script uses multiple detection methods for maximum reliability:
- ResizeObserver (modern browsers)
- MutationObserver (DOM changes)
- Window resize events
- Regular interval polling (fallback)
Prop | Type | Default | Description |
---|---|---|---|
initialHeight | string | "100px" | Initial height before resize messages |
animate | boolean | true | Whether to animate height changes |
animationDuration | number | 250 | Animation duration in ms |
onResizeHeight | function | undefined | Callback when height changes |
checkOrigin | boolean|string[] | false | Whether to check message origins |
allowedOrigins | string[] | [] | Allowed origins if checkOrigin is true |
+ standard iframe props | - | - | src, id, title, etc. |
Option | Type | Default | Description |
---|---|---|---|
targetElement | HTMLElement | document.body | Element to measure height of |
checkInterval | number | 200 | Interval for polling height changes (ms) |
debounceDelay | number | 50 | Debounce delay for resize events (ms) |
debug | boolean | false | Enable debug logging |
If the iframe is not resizing correctly:
- Check that the child script is being loaded in the iframe content
- Ensure there are no Content Security Policy issues blocking message passing
- Try setting
debug: true
in the child options to see detailed logs - Verify that height changes are being detected (check for any CSS issues)