jq如何监听iframe内的body高度

jq如何监听iframe内的body高度

阅读 3.6k
2 个回答
新手上路,请多包涵

$(document.getElementById("iframe的name").contentWindow).find('body').height()

要监听dom 第一个就应该想到MutationObserver
clipboard.png

以下是效果图

clipboard.png

代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>child</title>
        <style>
        body{
            border: solid 10px red;
        }
        </style>
    </head>
    <body>
        <script>
            const body = document.body;
            // 监听
            const observer = new MutationObserver(mutationsList => {
                // 得到当前的高度
                const currentHeight = window.getComputedStyle(body,null).height;
                // 向父窗口发数据
                top.postMessage(currentHeight,"*");
            });

            observer.observe(body, {
                attributes: true,
                childList: true,
                subtree: true,
            });


            // 定时随机变化body高度
            const random = (min, max) =>
                Math.floor(Math.random() * (max - min + 1)) + min;
            setInterval(() => {
                body.setAttribute("style", `height:${random(100, 500)}px`);
            }, 2000);
        </script>
    </body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>parent</title>
        <style>
            #fm {
                height: 600px;
            }
        </style>
    </head>
    <body>
        <p id="text"></p>
        <iframe id="fm" src="child.html" frameborder="0"></iframe>
        <script>
            const p = document.querySelector("#text");
            // 监听发来的数据
            window.addEventListener("message", function(e) {
                p.innerHTML = `当前child高度为${e.data}`;
            });
        </script>
    </body>
</html>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题