Skip to content

Instantly share code, notes, and snippets.

@scagood
Created January 29, 2018 16:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scagood/a5f967156649639cad007bc583fc885b to your computer and use it in GitHub Desktop.
Save scagood/a5f967156649639cad007bc583fc885b to your computer and use it in GitHub Desktop.
iframe message events attached to the iframe, not the window

Attach message events to iframe elements

Usage

Very simply copy/download and include iframe.message.js into your document, then start attatching event listeners.

Example inclusions:

<script src="iframe.message.js"></script>

Or:

<script>
    window.addEventListener('message', e => {
        document.querySelectorAll('iframe').forEach(frame => {
            if (frame.contentWindow === e.source) {
                frame.dispatchEvent(
                    new MessageEvent('message', e)
                )
            }
        });
    });
</script>
window.addEventListener('message', e => {
document.querySelectorAll('iframe').forEach(frame => {
if (frame.contentWindow === e.source) {
frame.dispatchEvent(
new MessageEvent('message', e)
)
}
});
});
<script>
let c = 0;
// Every second
setInterval(
() => parent.postMessage(
// Send 'Hello #1'
'Hello #' + (c++),
// Quick iframe parent origin.
// This, assuming that referrer is at document root.
document.referrer
),
1000
);
</script>
<html>
<head>
<script src="iframe.message.js"></script>
<script>
window.addEventListener('load', function () {
// 'Select' the iframe
const iframe = document.querySelector('iframe');
// Add the event directly to the iframe element.
iframe.addEventListener('message', msg => {
console.log('Recieved message:', msg.data);
})
});
</script>
</head>
<body>
<iframe src="example.frame.html"></iframe>
</body>
</html>
<html>
<head>
<script src="iframe.message.js"></script>
<script>
// Make an iframe in 1 second
setTimeout(function () {
// Make an iframe
var iframe = document.createElement("iframe");
iframe.src = 'example.frame.html';
// Add the event directly to the iframe element.
iframe.addEventListener('message', msg => {
console.log('Recieved message:', msg.data);
})
// Place the iframe in the body.
document.body.appendChild(iframe);
}, 1000)
</script>
</head>
<body></body>
</html>
<html>
<head>
<script src="iframe.message.js"></script>
<script>
window.addEventListener('load', function () {
// 'Select' the iframe
const iframe = document.querySelector('iframe');
// Add the event directly to the iframe element.
iframe.addEventListener('message', msg => {
console.log('IFrame 1:', msg.data);
})
});
setTimeout(function () {
var iframe = document.createElement("iframe");
iframe.src = 'example.frame.html';
iframe.addEventListener('message', msg => {
console.log('IFrame 2:', msg.data);
// msg.source.postMessage('test', msg.origin);
})
document.body.appendChild(iframe);
}, 1000)
</script>
</head>
<body>
<iframe src="example.frame.html"></iframe>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment