uni-app 小程序webview接收不到另一个uniapp h5的postMessage消息

uni-app 小程序webview接收不到另一个uniapp h5的postMessage消息

开发环境 版本号 项目创建方式
Windows 10 专业版 4.85 HBuilderX

示例代码:

// 方式1: 使用 @message 事件 (推荐) const handleMessage = (e) => { console.log(‘小程序接收到web-view消息:’, e);

// 小程序中消息数据在 e.detail.data 中
if (e.detail && e.detail.data) {
const messageData = e.detail.data[0]; // 取第一个消息
console.log(‘解析后的消息数据:’, messageData);
processMessage(messageData);
}

// 方式2: 使用 @onPostMessage 事件 (兼容性) const handlePostMessage = (e) => { console.log(‘通过onPostMessage接收:’, e);

if (e.detail && e.detail.data) {
const messageData = e.detail.data[0];
processMessage(messageData);
}

// 统一处理消息 const processMessage = (messageData) => { if (!messageData) return;

switch (messageData.type) {
case ‘switchCamera’:
console.log(‘切换摄像头:’, messageData.cameraFlag);
// 在这里处理摄像头切换逻辑
uni.showToast({
title: 切换到${messageData.cameraFlag ? '机场视角' : '无人机视角'},
icon: ‘none’
});
break;
case ‘init’:
console.log(‘H5页面初始化完成:’, messageData.message);
break;
default:
console.log(‘未知消息类型:’, messageData);
}


### 操作步骤:


<button @click="handlePost">{{ cameraFlag?'机场视角':'无人机视角' }}</button>
try {
// 小程序 web-view 要求的数据格式
uni.postMessage({
data: [messageData] // 必须是数组格式
});
alert('H5页面加载完成');
console.log('通过 uni.postMessage 发送成功');
return true;
} catch (error) {
console.error('uni.postMessage 发送失败:', error);
}

预期结果:

期望handleMessage能接受到消息信息


### 实际结果:


没有接收到消息

bug描述:

h5的添加了uni-web-view.js,发送了消息但是小程序无法接受到消息


更多关于uni-app 小程序webview接收不到另一个uniapp h5的postMessage消息的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

小程序平台的信息传递不是实时的,是特定时机统一返回。https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html

更多关于uni-app 小程序webview接收不到另一个uniapp h5的postMessage消息的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app小程序web-view中接收不到H5页面postMessage消息,通常由以下几个原因导致:

  1. uni-web-view.js引入问题
    H5页面必须正确引入uni-web-view.js(1.8.0+版本),且需在Vue实例化之前引入:

    <script src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-webview-js/1.8.0/uni.webview.1.8.0.js"></script>
    
  2. 消息格式不符规范
    小程序web-view要求消息格式必须为:

    uni.postMessage({
      data: [{ type: 'switchCamera', cameraFlag: true }] // 必须是数组,元素为对象
    });
    
  3. H5页面未完全加载
    需确保在页面onLoadmounted后发送消息,建议在uni.postMessage前加延时:

    setTimeout(() => {
      uni.postMessage({ data: [messageData] });
    }, 500);
    
  4. 跨域限制(开发环境)
    本地开发时,H5域名需加入小程序后台“request合法域名”,或使用hbuilderx内置浏览器测试。

  5. 事件监听方式
    小程序端应使用[@message](/user/message)监听:

    <web-view :src="url" [@message](/user/message)="handleMessage"></web-view>
回到顶部