uniapp分别开发微信小程序和H5,通讯踩坑

前言

在混合开发场景中,我们使用uniapp同时开发了微信小程序和配套H5页面。但当H5需要与宿主小程序进行通讯交互时,却意外遭遇了长久的通讯协议地狱。本文将复盘我们尝试的4种方案及其背后的技术原理,最终成功实现动态通讯的方案。

一、为何需要跨端通讯?

业务中存在小程序无法显示物理公式、数学公式。那么在练习题结束之后,需要自动返回,这时候就需要.navigateBack();和postMessage。

二、四次方案迭代的血泪史

方案1:uni原生跳转(失败)

以为可以直接uni.navigateBack()就可以挑战到小程序的上一页。好的直接失败,并且刷新了H5界面

问题根源: 因为H5 也是uniapp开发的,所以直接调用的是当前项目(H5)。

方案2:引入uni-sdk、wx-sdk(失败)

xml 复制代码
<!-- 微信 JS-SDK  -->
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
<!-- uni 的 SDK -->
<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>

问题根源 : 我在index.html里面直接引入的window.wx.miniProgram直接undefind。现在回想不知道是不是因为我没有重启项目

方案3:静态引入微信JS-SDK(失败)

import webUni from './uni.webview.1.5.4.js'; import wx from './jweixin-1.3.2.js';

我在pages/course/index 界面中import使用后,调用webuni/wx还是失败。

方案4:动态注入SDK(成功✨)

ini 复制代码
	setwxSdk() {
		const script = document.createElement('script');
		// script.src = `/static/js/jweixin-1.6.0.js?v=${Date.now()}`; // 此方案无效
		script.src = 'https://res.wx.qq.com/open/js/jweixin-1.6.0.js'
		script.onload = () => {
			if (!window.wx.config) {
				console.error('微信 JS-SDK 未加载!');
				this.setwxSdk();
				return;
			}
			this.initWeixinSDK();

		};
		document.head.appendChild(script);
	}

三、通讯实现

javascript 复制代码
window.wx.ready(() => {
			window.wx.miniProgram.postMessage({
				data: {
					type: 'customEvent',
					content: 'Hello from UniApp H5!'
				}
			});
			window.wx.miniProgram.navigateBack();
		});

四、遗留问题

继续研究实时返回ing

相关推荐
陈随易3 小时前
Postman 被曝自动往 Claude Code 和 Codex 装插件
前端·后端·程序员
Csvn6 小时前
性能监控
前端
Csvn7 小时前
构建工具
前端
FRing037 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
kyriewen9 小时前
Skills 榜前 10 我全装了:只有 3 个能直接用
前端·javascript·程序员
IT_陈寒10 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
工控丫丫10 小时前
帆软看板中经常使用的公式函数及经常搭的组合
前端·javascript·数据库
jerrywus10 小时前
我用 GPT-6.1-sol 做了台会讲解的 3D 售货机:60 罐饮料,一口没喝上
前端·agent·claude
孟陬12 小时前
Foobar 技术周刊#159:当看不懂代码时,如何高效排障调试。脏页陷阱:一条只读查询,写入数 TB 数据。推测解码:大模型加速利器
前端·人工智能·后端
Zhao-Jichao12 小时前
AI Prompting for Everyone 课程笔记 - P17 图像生成 Imaging Generation
前端