iframe跨文档传输(postMessage跨域)

www.test.com 域下的 a.html页面 中通过iframe引入另一个域 www.domain.com 下的 b.html 页面,然后在两个页面间传递数据:

a.html:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>

        <iframe src=" http://www.domain.com/b.html"id="ifr" width="" height=""></iframe>
        <br />
        <br />
        <input type="text" name="" id="" value="" placeholder="输入内容"/>
        <button>写入iframe</button>

        <script>
                var buton=document.getElementsByTagName("button")[0]

                buton.onclick=function(){
                    var con=document.getElementsByTagName("input")[0].value
                    var ifr = document.getElementById('ifr');
                    var targetOrigin = 'http://www.domain.com';

                    //通过ifrmae的contentWindow获取到iframe的window对象,通过postmessage向其发送数据消息
                    ifr.contentWindow.postMessage(con, targetOrigin);
                }

                window.addEventListener('message', function(event){    //给当前window建立message监听函数
                    // 通过origin属性判断消息来源地址
                    if (event.origin == 'http://www.domain.com') {
                        alert(event.data);    // 弹出"数据内容"
                    }
                }, false);

        </script>
    </body>
</html>

a.html页面中通过iframe的contentWindow属性获取到iframe的window对象,然后利用html5新postMessage向其发送消息数据。同时,通过监听当前window的message事件,利用event.arigin来判断message的来源,然后弹出跨域返回来的数据。

b.html

另一个域下的b.html代码与a页面类似:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>

        <input type="" name="" id="" value="" />
        <br />
        <br />
        <button target="" title="">将数据传给parent页面</button>

        <script>
                var inpt=document.getElementsByTagName("input")[0];

                window.addEventListener('message', function(event){
                    if (event.origin == 'http://www.test.com') {
                        inpt.setAttribute("placeholder",event.data)
                    }
                }, false);

                var a=document.getElementsByTagName("button")[0];

                a.onclick=function(){
                    var targetOrigin = 'http://www.test.com';
                    window.parent.postMessage(inpt.value, targetOrigin);
                }

        </script>
    </body>
</html>

最后放上,parent页面和子iframe页面间互相传递数据的效果图:

parent向iframe页面传输数据:

这里写图片描述

iframe向parent页面传输:
这里写图片描述

至此,over!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值