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相关配置注释掉即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值