iframe cross domain messaging with jQuery postMessage plugin

大兔子大兔子 提交于 2019-12-05 03:14:09

Never used that plugin, can't really say what's wrong with it, but, alternately you can use HTML 5 postMessage.

Since you want to send data to the iframe, register an event listener on it:

window.addEventListener('message', receiver, false);

function receiver(e) {
   if (e.origin == '*') {
     return;
   } else {
     console.log(e.data);
   }
}

Be sure to check origin against your trusted domain to prevent damage, instead of "*" which will accept all.

Now you can call

message = "data";
iframe = document.getElementById('iframe');  
iframe.contentWindow.postMessage(message, '*');    

Again, you should change "*" with the destination domain.

I had a similar requirement and ended up using postMessage to send data from the child to the parent. Then, to send data from the parent to the child, I passed the data in a query string through the iframe's src attribute. By doing so, I could then parse the query string and retrieve the data within my child page.

1.sendPage
<script type='text/javascript'>
var sendpost = document.getElementById('wrapper').scrollHeight;
var target = parent.postMessage ? parent : (parent.document.postMessage ?   parent.document : undefined); 
target.postMessage(sendpost,'*');
</script>
2. real iframe load page
function handling(e){
                sendIframeHeight = e.data;
}

// <= ie8
if (!window.addEventListener) {
                window.attachEvent("onmessage", handling);
}else{ // > ie8
                window.addEventListener('message', handling, false);
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!