PostMessage函数实现iframe嵌套页面的数据传递

2018-06-28  本文已影响0人  素时年锦

最近在公司开发中遇到移动端官网首页用iframe嵌套登录页,想要在点击获取验证码的时候整个页面会有模态框弹出,但是实际弹出的模态框只能在iframe里面全覆盖,没有办法弹出覆盖到外面,下面写了简单小demo效果:

下面点击验证码弹出的是的iframe嵌套的大小,没有能将下面灰色整个父盒子的区域遮住


image.png

之前用了一个方法在iframe嵌套的那个页面动态给父级创建一个模态框,然后再动态给移除,现在公司两个网址的协议改了以后,现在不行了,报错提示存在跨域

注意:下面是为了方便讲解我自己瞎编的两个网站的网址:

a网页:http://a.com.cn (这个a网页是需要嵌套b网页的页面)
b网页:https://b.com.cn (这个b网页是登录页面)

a网页(http://a.com.cn):
<div class="box">
    <iframe id="ifr" class="box2" src="https://a.com.cn" width="" height=""></iframe>
</div>

这个时候a网页js里面写入,下面做了一个sit测试环境判断

window.onload = function (){
    //父盒子创建模态框
    var _div=document.createElement('div');
        _div.style='position: fixed;top: 0px;left: 0px;width: 100%;height: 100%;z-index: 0;background-color: rgba(0, 0, 0, 0.7);';
        window.addEventListener('message',function (e){

              message的时间对象是e ,e有三个属性
              e.source:发送消息的窗口
              e.origin: 消息发向的网址
              e.data: 消息内容

            //sit环境判断  
           if(e.origin== "https://b.com.cn" || "https://bsit.com.cn"){
               e.data=="1"?document.body.appendChild(_div):document.body.removeChild(_div);
            }
      },false);
}
b网页(https://b.com.cn):

此处也对父页面的环境做了判断,传过去的是 "1",下面的url就是要传给的父盒子的网址。父页面根据传过来的1,来判断要不要动态创建模态框,剩下的就是给iframe的z-index层级高于父盒子的模态框,不然会被父页面的模态框盖住,

var msk = function msk() {
        var URL = window.location.href;
        var url = "";
        if (URL.indexOf("sit") > -1) {
            url = "http://a.com.cn";
        } else {
            url = "http://a.com.cn";
        }
        window.parent.postMessage("1", url);
    };

下面就可以实现了

上一篇下一篇

猜你喜欢

热点阅读