当前位置: 首页 > news >正文

iframe 内嵌跨域页面如何做到高度自适应

场景描述:

        parent.html 页面中通过iframe内嵌children.html页面,且children.html 页面高度是动态变化的,此时需要parent.html中的iframe的高度自适应children.hml 的高度,避免出现滚动条., 解决方法分为以下两步

1,parent.html 中通过iframe 内嵌children.html 页面,监听message 消息,接收返回参数设置iframe 的高度

// my-src 对应的是childrem.html 页面的地址
<iframe
      ref="iframeRef"
      license="xxxx"
      width="100%"
      class="iframe-msg-content"
      src="my-src"
      frameborder="0"
    ></iframe>
    <script setup>
    import {onMounted, onUnmounted} from 'vue';
    
    const handleMessage = (event: MessageEvent) => {
      if (Object.prototype.toString.call(event.data) === '[object String]') {
        // 过滤来自webPack发送的possMessage 消息
        const message = JSON.parse(event.data);
        if (message?.type === 'HEIGHT') {
          // 设置iframe 的高度
          iframeRef.value.style.height = message.data.height + 'px';
        }
      }
    };
    onMounted(()=>{
      window.addEventListener('message', handleMessage, false);
    });
   
    onUnmounted(() => {
      window.removeEventListener('message', handleMessage, false);
    });
    </script>
    
    // 先给一个默认的宽高
    .iframe-msg-content{
    width: 100%;
    height: 400px
    }

 2,在children.html 页面中监听自身最外层标签的尺寸变化,并将变化后的尺寸发送给parent.html页面

// child.html最外层元素 .page-container
<div class="page-container" ref="pageContainer"></div>

<script setup lang="ts">
import {ref,reactive, onMounted, onUnmounted} from "vue";
const pageContainer = ref();
const state = reactive({
     resizeObserve: null as ResizeObserver|null,
})

onMounted(()=>{
    nextTick(() => {
        if (!state.resizeObserve) {
          state.resizeObserve = new ResizeObserver((entires) => {
            for (const entry of entires) {
              if (entry.target === pageContainer.value) {
                const message = {
                  type: 'HEIGHT',
                  data: {
                    height: pageContainer.value?.offsetHeight,
                  },
                };
                // 此时监听统计图dom尺寸的改变,重载统计图
                window.parent.postMessage(JSON.stringify(message), 'ip+端口');
              }
            }
          });
        }
        state.resizeObserve.observe(pageContainer.value as any);
      });
})
</script>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AI绘画入门实践|Midjourney:使用 --no 去除不想要的物体
  • 【Python从入门到进阶】61、Pandas中DataFrame对象的操作(二)
  • Unity + Hybridclr + Addressable + 微信小程序 热更新报错
  • Lua 类管理器
  • ChatTTS(文本转语音) 一键本地安装爆火语音模型
  • 微信公众号获取用户openid(PHP版,snsapi_base模式)
  • 【vluhub】zabbix漏洞
  • Minos 多主机分布式 docker-compose 集群部署
  • C语言玩一下标准输出——颜色、闪烁、加粗、下划线属性
  • Flink SQL 的工作机制
  • C++学习笔记——模板
  • UNIX 域协议
  • 从零到一使用 Ollama、Dify 和 Docker 构建 Llama 3.1 模型服务
  • 【Golang 面试 - 基础题】每日 5 题(十)
  • AIGC-VDM -Video Diffusion Models论文解读
  • 【技术性】Search知识
  • 345-反转字符串中的元音字母
  • bearychat的java client
  • go append函数以及写入
  • iOS 系统授权开发
  • Laravel核心解读--Facades
  • leetcode46 Permutation 排列组合
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Yii源码解读-服务定位器(Service Locator)
  • 不上全站https的网站你们就等着被恶心死吧
  • 从零搭建Koa2 Server
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #DBA杂记1
  • #window11设置系统变量#
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (1)svelte 教程:hello world
  • (day6) 319. 灯泡开关
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四)事件系统
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转载)CentOS查看系统信息|CentOS查看命令
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .Net 8.0 新的变化
  • .net core 连接数据库,通过数据库生成Modell
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .net core使用RPC方式进行高效的HTTP服务访问