解决Iframe跨域高度自适应,利用window.postMessage()实现跨域消息传递页面高度(JavaScript)

Posted eqweqw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决Iframe跨域高度自适应,利用window.postMessage()实现跨域消息传递页面高度(JavaScript)相关的知识,希望对你有一定的参考价值。

在iframe跨域引用高度自适应这块写的js方式都试了不管用,最终使用的是window.postMessage() 跨域获取高度 传递信息

 

1.首先,在主页面上使用iframe引入子页面:也就是A.html页面引入B.html页面,下面看看A.html技术图片

技术图片
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
        <style>
        *{
            padding: 0;
            margin: 0;
        }
    </style>
    <body>
        <div>Hello! Is A.Html</div>

        <div align=center>
            <iframe Id="frame_child" width="100%"></iframe>
        </div>
    </body>
</html>
<script>
    $(function() {
        window.onload = function() {
            var url = "http://liting397.cn/";     //要访问子类调用地址   
            $("#frame_child").attr("src", url);
            $("#frame_child").load(function() {
                setTimeout(function() {
                    var frame = document.getElementById("frame_child").contentWindow;
                    var message = {
                        parentOrigin: window.origin,
                        msg: "收到请回复"
                    };
                    frame.postMessage(JSON.stringify(message), url);  
                    console.log(‘发送成功‘);  
                }, 2000);
                window.addEventListener("message", receiveMessage, false);
            });
        }
        var receiveMessage = function(event) {
            //if (event.origin !== event.data.Domain)
            //     return; 
            console.log("子页面有消息来了");
            $("#frame_child").attr("height", event.data + ‘px‘);
            window.removeEventListener("message", receiveMessage, false);
        }
    })
</script>
View Code

2.子页面代码块js下边是B.html页面,B.html页面

技术图片

技术图片
<script>
    //本ifram为自适应js  使用postMessage  像父类传递消息   
    $(function() {
        window.addEventListener(‘message‘, function(event) {
            const data = JSON.parse(event.data)
            if (event.origin !== data.parentOrigin) {
                return
            }
            event.source.postMessage(document.body.scrollHeight, event.origin);
        }, false);
    });
</script>
View Code

这里是写好的ifram引用地址 可以参考  http://liting400.cn/

以上是关于解决Iframe跨域高度自适应,利用window.postMessage()实现跨域消息传递页面高度(JavaScript)的主要内容,如果未能解决你的问题,请参考以下文章

跨域IFRAME自适应高度(子页面TAB切换不同的高度,主页面IFRAME嵌套子页面自适应高度)

跨域下的iframe自适应高度

iframe的跨域高度自适应(通过跨域页面中嵌套本域页面)

如何让iframe自适应高度? 我也遇到这个问题,我想知道你是怎么解决的呢?

iframe高度自适应,终于解决了

如何让iframe框架和主页面共用一个滚动条(也称为:iframe高度自适应问题)