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

postMessage 收到消息类型 “webpackWarnings“

场景描述:

        当A系统中的parent页面使用iframe内嵌C系统的child页面,并且在parent页面中通过postMessageg给child页面发送消息时,如果C系统中使用了webpack,则webpack也会给child页面发送消息 ,消息类型为webpackWarnings。那么如何使parent页面和child页面正确通信呢,主要分为以下两步。

1,parent页面要在iframe 加载完成之后,再给child页面发消息,同时约定好发送数据的格式

// parent.vue
<iframe
      ref="iframeRef"
      width="100%"
      class="iframe-msg-content"
      src="my-src"
      frameborder="0"
    ></iframe>
    <script setup>
    import {onMounted, onUnmounted} from 'vue';
    

    onMounted(()=>{
    iframeRef.value.onload = () => {
        // iframe 加载完成之后,获取iframe 内嵌子页面窗口
        const childWindow = iframeRef.value.contentWindow;
        const messageData = {
          type: '约定的消息类型',
          data: 要发送的数据,
        };
        // postMessage 发送字符串类型的数据才能被目标窗口接收
        childWindow.postMessage(JSON.stringify(messageData), 'ip+端口');
      };
      window.addEventListener('message', handleMessage, false);
    });
    
    onUnmounted(() => {
      window.removeEventListener('message', handleMessage, false);
    });
    </script>
    
    // 先给一个默认的宽高
    .iframe-msg-content{
    width: 100%;
    height: 400px
    }

 2,child页面监听message 事件获取来自parent页面发送的数据

// 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({
    
})

/**
     * @description: 消息处理
     * @return {*}
     */
    const handleMessage = (event:MessageEvent) => {
    // 因为webpack 发送的数据是对象类型,parent 页面发送的是经过JSON.stringify转换的字符串类型的
     // 过滤来自webpack发送的possMessage 消息
      if (Object.prototype.toString.call(event.data) === '[object String]') {
        const message = JSON.parse(event.data);
        if (message?.type === '约定好的数据type') {
            // 处理来自parent 页面的数据
        }
      }
    };

onMounted(()=>{
   window.addEventListener('message', handleMessage);
})

 onUnmounted(() => {
      window.removeEventListener('message', handleMessage);
    });
</script>

注意:

1,postMessage 发送字符串类型的数据才能被内嵌子页面接收。

2,通过类型过滤webpack发送的消息。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C#实现数据采集系统-modbustcp数据通知
  • 云服务器部署vite前端项目
  • Flink内存管理机制
  • 第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024,9月13-15)
  • RK3562 NPU跑飞问题处理
  • 如何优化淘客返利系统中的前端性能与用户体验
  • 分享经验:如何在Facebook上建立有意义的关系
  • 开源一个react路由缓存库
  • 每天一个数据分析题(四百五十七)- 分层随机抽样
  • 【Qt】QLCDNumberQProgressBarQCalendarWidget
  • JL 跳转指令的理解
  • C++初学(3)
  • JAVA同城拼桌活动报名系统支持H5小程序APP公众号源码
  • Android Studio Build窗口出现中文乱码问题
  • 得到xml所有label 名字和数量 get_xml_lab.py,get_json_lab.py
  • 收藏网友的 源程序下载网
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 4个实用的微服务测试策略
  • ComponentOne 2017 V2版本正式发布
  • django开发-定时任务的使用
  • HTTP 简介
  • Intervention/image 图片处理扩展包的安装和使用
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • LeetCode算法系列_0891_子序列宽度之和
  • 如何解决微信端直接跳WAP端
  • Android开发者必备:推荐一款助力开发的开源APP
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 国内开源镜像站点
  • ​比特币大跌的 2 个原因
  • ​业务双活的数据切换思路设计(下)
  • # 数仓建模:如何构建主题宽表模型?
  • #QT(智能家居界面-界面切换)
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1)虚拟机的安装与使用,linux系统安装
  • (C++17) optional的使用
  • (day6) 319. 灯泡开关
  • (k8s中)docker netty OOM问题记录
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)3D模板阴影原理
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ***监测系统的构建(chkrootkit )
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net 发送邮件
  • .net网站发布-允许更新此预编译站点
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @component注解的分类
  • @RunWith注解作用
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [].slice.call()将类数组转化为真正的数组
  • [8-27]正则表达式、扩展表达式以及相关实战