Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Very basic wrapper around window.postMessage.

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages