iframe_bridge
v1.1.0
Published
Very basic wrapper around window.postMessage
Downloads
27
Readme
IFrameBridge
Very basic wrapper around window.postMessage. Handles handshaking and JSON conversion. Makes sure you don't lose any messages.
Install from npm:
npm install --save iframe_bridge
Then in your ES6+ code:
const IFrameBridge = require('iframe_bridge');
or
import IFrameBridge from 'iframe_bridge';
Usage
iframe_bridge.js
file is the compiled browser-ready version of the library. If you reference it with <script>
tag, the constructor will become available globally as window.BrowserBridge
. You can also require it from within an ES6 app with your own build system (see above).
Example usage:
(index.html)
<script src="../dist/iframe_bridge.js"></script>
<iframe id="iframe" src="iframe.html"></iframe>
<script>
var iFrame = document.getElementById('iframe');
// Create an instance of bridge. By giving it iFrame's window as targetWindow,
// you indicate this instance will work in "server mode",
// and attempt to initiate connection.
var bridge = new IFrameBridge({
targetWindow: iFrame.contentWindow
});
// You then attach your event handlers. You should do this before calling init.
bridge.on('response_from_iframe', (data) => {
console.log(data); // "Hello back"
});
// Once you call init, we will start trying to connect to the iframe
// If you want to wait, just attach .then() to this call, it will return a promise.
bridge.init();
// Any messages you post here, before we are connected, will be queued
// and flushed once connection is established.
bridge.postMessage('event_from_parent', {
message: 'Hello'
});
</script>
(iframe.html)
<script src="../dist/iframe_bridge.js"></script>
<script>
// Create an instance of the bridge without giving it targetWindow.
// The parent's window will be determined from the handshake message.
var bridge = new IFrameBridge();
// You can also listen to the generic "message" event. You will get all received events here.
bridge.on('message', (payload) => {
if (payload.name === 'event_from_parent' && payload.data.message === 'Hello') {
bridge.postMessage('response_from_iframe', 'Hello back');
}
});
// Call init to start listening for handshake
bridge.init();
</script>
You can see a working example here: tester/index.html.
Additional options
Check out DEFAULT_OPTIONS
inside IFrameBridge.js for the full list with comments.
This object will be available (and mutable) on IFrameBridge.DEFAULT_OPTIONS
.
License
MIT