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

uniapp中h5的微应用解决办法

考虑过用wujie,参考官网Vue组件封装 | 无界的教程,虽然没报错,但是子应用的vue节点根本没挂载上,不知道什么原因,如下图所示  

后面采用iframe方式将子应用导入进来:

父应用:

<template>
  <view class="index-box">
    <!-- #ifdef H5 -->
    <iframe
      src="http://192.168.0.101:5174/#/"
      id="iframe"
      ref="iframeRef"
    ></iframe>
    <!-- #endif -->
    <!-- <WujieVue width="100%" height="100%" name="vue3" :url="'//192.168.0.101:5174/#/'" :sync="true"></WujieVue> -->
  </view>
</template>

<script setup lang="ts">
import { nextTick, ref } from 'vue'
const iframeRef = ref()
// #ifdef H5
nextTick(() => {
  // 向子页面发送消息
  ;(document as any).getElementById('iframe').onload = function () {
    this.contentWindow.postMessage(
      JSON.stringify({
        flag: 'iframe', // 父子双方约定的通信标识
        message: 'iframe加载完成子页面',
      }),
      //   'http://192.168.0.101:5174/#/', // 谁接收
      '*',
    )
    window.addEventListener('message', (event: any) => {
      const data = event.data[0] === '{' ? JSON.parse(event.data) : event.data;
      if (data.flag !== 'iframe') return
      console.log('子应用发来:', data.message)
    })
  }
})
// #endif
</script>

<style scoped lang="scss">
.index-box {
  height: 100%;
  width: 100%;
  #iframe {
    height: 100%;
    width: 100%;
    border: none;
  }
}
</style>

子应用:main.ts中

window.addEventListener(
  'message',
  function (event) {
    // if (event.origin !== 'http://192.168.0.101:5173') return; // 不是父应用发来的不接收,改方法不好,因为地址会变
    const data = event.data[0] === '{' ? JSON.parse(event.data) : event.data;

    if (data.flag !== 'iframe') return

    console.log('父应用发来:', data.message)
    ;(window as any).parent.postMessage(
      JSON.stringify({
        flag: 'iframe',
        message: '子应用收到父应用消息',
      }),
      '*',
    )
  },
  false,
)

注意:不同域名下,父子页面通信只能用postMessage,否则都会出现跨域问题报错哟。  

目前出现一个问题就是,iframe嵌入子页面后,子页面内的ttf文件无法解析,导致iconfont图标内容丢失了

目前还没找到解决办法

更新:已找到原因  

乱看网上相关配置,将图中所示devServer相关配置注释掉即可


http://www.kler.cn/a/518323.html

相关文章:

  • 数据的秘密:如何用大数据分析挖掘商业价值
  • JVM学习指南(48)-JVM即时编译
  • 3097. 或值至少为 K 的最短子数组 II
  • 数据库的JOIN连接查询算法
  • 路径总和(力扣112)
  • 计算机网络之应用层
  • 中级运维工程师面试题汇总(含答案)
  • Java NIO方面面试题及答案解析
  • qt--Qml控件库如何从外部导入2.0
  • [GXYCTF2019]Ping Ping Ping1
  • Coolbpf最新特性解读:profiler功能上线,助力性能分析和优化
  • C++使用异或找出数组中奇数次出现的数据
  • PageView组件的功能和用法
  • Facebook广告点击率CTR太低 如何优化
  • shell编程-awk使用系统学习
  • 如何部署 Flask 应用程序到生产环境?
  • 人工智能的未来:AGI、ACI与ASI的探索
  • Kimi k1.5:基于大语言模型的多模态强化学习训练技术报告
  • Base64编码解密:解码下载邀请
  • 使用 Tauri 开发桌面应用程序:新一代的轻量解决方案
  • 编写python 后端 vscode 安装插件大全
  • DDD架构实战第七讲总结:分层模型和代码组织
  • Redis内存面试与分析
  • 如何在 Windows 上安装 MySQL(保姆级教程2024版)
  • RocketMQ底层哪里用了Netty
  • 51单片机(四)定时器