html5—postMessage

主页面

<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="utf-8">  
        <title>跨文档消息传输示例</title>  
    </head>  
    <body>  
        <iframe src="http://193.168.19.168/ztree/demo/cn/msg.html" width="400" height="400" onload="sendMsg();"></iframe>  
        <div id="div1">  
              
        </div>  
        <script type="text/javascript" charset="utf-8">  
            //绑定onmessage事件,接收消息!  
            addEventListener('message',function(e){  
                e=e||event;  
                  
                //e.origin:协议+域名+端口(80默认不显示)  
                //e.data:消息内容  
                  
                var obj=JSON.parse(e.data);  
                  
                if(!obj.error){  
                    alert('接收成功!');  
                    document.getElementById('div1').innerHTML='从e.origin='+e.origin+',那里来的消息e.data='+e.data;  
                }  
            },false);  
              
              
            function sendMsg(){  
                //这里必须获得iframe窗口的window对象  
                //且不要用document.getElementByTagName('iframe')[0]  
                var winIframe=window.frames[0];  
  
                setTimeout(function(){  
                    //iframe窗口加载完成,使用postMessage向iframe内发送消息  
                    //第一个参数为:消息内容  
                    //第二个参数为:接收消息的对象窗口url,一般与iframe的src一致或url只到端口号http://193.168.19.168/  ;
                    winIframe.postMessage('{"张三":10,"李四":20,"王五":30,"小明":40,"小白":50,"老五":60,"老周":67}',"http://193.168.19.168/ztree/demo/cn/msg.html");  
                },2000);  
            }  
        </script>  
    </body>  
</html>  

iframe指向的页面:

<!DOCTYPE html>  
<html>  
    <head>  
        <meta charset="utf-8">  
        <title>iframe内容</title>  
        <script type="text/javascript" charset="utf-8">  
            //绑定onmessage事件,接收消息  
            addEventListener('message', function(e) {  
                e = e || event;  
  
                //可以过滤域  
                if (e.origin == 'http://127.0.0.1:8020') {  
                    alert('可以信任的信源');  
  
                    //接收从e.origin发来的消息e.data  
                    var obj = JSON.parse(e.data), aHtml = [];  
  
                    for (var key in obj) {  
                        var age = obj[key], str = '';  
  
                        switch(true) {  
                            case age<=10:  
                                str = key + '小朋友今年' + age + '岁。';  
                                break;  
                            case age<=20:  
                                str = key + '年青人今年' + age + '岁。';  
                                break;  
                            case age<=30:  
                                str = key + '中年人今年' + age + '岁。';  
                                break;  
                            case age<=40:  
                                str = key + '壮汉今年' + age + '岁。';  
                                break;  
                            case age<=50:  
                                str = key + '猛男今年' + age + '岁。';  
                                break;  
                            case age<=60:  
                                str = key + '快退休了,今年' + age + '岁。';  
                                break;  
                            default:  
                                str = key + '老年人今年' + age + '岁。';  
                                break;  
                        }  
                          
                        aHtml.push(str);  
                    }  
  
                    document.body.innerHTML = '从e.origin=' + e.origin + ',发来的消息e.data=<br />' + aHtml.join('<br />');  
                } else {  
                    alert('不可信任的消息源');  
                }  
  
                setTimeout(function() {  
  
                    //e.source即主页面的window对象,使用它向主页面发送消息  
                    e.source.postMessage('{"error":false,"msg":""}', e.origin);  
                }, 2000);  
            }, false);  
  
        </script>  
    </head>  
    <body>  
        <div id="div1">  
  
        </div>  
    </body>  
</html>  

参考

http://www.cnblogs.com/jscode/p/3585932.html

https://segmentfault.com/a/1190000004414858

http://blog.youkuaiyun.com/starrexstar/article/details/8031859

http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html

 

转载于:https://my.oschina.net/DemonCry/blog/745770

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值