For starters: this can only be done if you have control over parent and child source.

Sometimes you might have the need to communicate from a child iframe to its parent in a cross domain environment.
This is how it can be done using JS/jQuery, and some fine jQuery plugins.

Get the $.postMessage plugin from

On the parent you implement these functions:

function initIframe(url, height){ var src = url + '&#' + encodeURIComponent( document.location.href ); var location = window.location; $.receiveMessage(function(e){ handleIframeMsg($.deparam( decodeURIComponent( )); },window.location); var iframe = $( '<iframe src="" width="100%" height="'+height+'" allowtransparency="true" frameborder="0" border="0" style="border:0 none;"></iframe>' ).appendTo( '#iframe' ); } function handleIframeMsg(obj){ if(obj.action){ switch(obj.action){ case "resize": if(obj.params && obj.params.height) $('#iframe iframe').attr('height',obj.params.height); if(obj.params && obj.params.width) $('#iframe iframe').attr('width',obj.params.width); break; } } }

The function initIframe will initialize the iframe:
- url: the iframe URL
- height: the height of the iframe
It will add the current document location to the iframe url for use in the iframe, and call $.receiveMessage for catching the iframe's sent messages.

Function handleIframeMsg will expect an obj with a property 'action' (you can implement this in any way you want), i only show you the resizing of the iframe here. This object is made through a deparam function (attached to this post), and does the opposite of jQuery's $.param function.

This must be implemented in the child (the iframe).

function sendToParent (obj){ var parent_url = decodeURIComponent( document.location.hash.replace( /^#/, '' ) ); $.postMessage(obj,parent_url,parent); }

and can be triggered like so:

sendToParent({action:"resize", params:{height:200, width:100}})

If you have any questions, feel free to ask.