uniapp打包的h5 如何触发@message事件
在uniapp打包的H5页面中,如何正确触发[@message](/user/message)事件?我在使用uni-webview或iframe等组件时,发现跨域通信时无法接收到message事件回调。尝试了postMessage传参和监听window.addEventListener(‘message’),但H5端始终无法触发@message事件。请问正确的实现方式是什么?是否需要特殊配置或权限设置?
2 回复
在 UniApp 中,H5 平台通过 uni.webview.1.0.js 库支持 Webview 通信,@message 事件用于接收从 Webview 页面发送的消息。以下是触发方法:
步骤:
- 引入官方库:在 H5 页面中引入
uni.webview.1.0.js(通常由 UniApp 自动处理)。 - 发送消息:在 Webview 页面使用
uni.postMessage发送数据。 - 监听事件:在父页面(嵌套 Webview 的页面)使用
@message监听。
示例代码:
父页面(Vue 文件):
<template>
<web-view :src="webviewUrl" @message="handleMessage"></web-view>
</template>
<script>
export default {
data() {
return {
webviewUrl: 'https://your-h5-page-url' // 替换为实际 H5 页面 URL
};
},
methods: {
handleMessage(event) {
// 接收来自 Webview 的消息
console.log('收到消息:', event.detail.data);
}
}
};
</script>
Webview 内嵌的 H5 页面:
<!DOCTYPE html>
<html>
<head>
<title>H5 Page</title>
<!-- 确保 UniApp Webview JS 已加载 -->
<script src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-webview/uni.webview.1.0.js"></script>
</head>
<body>
<button onclick="sendMessage()">发送消息</button>
<script>
function sendMessage() {
// 触发 @message 事件
uni.postMessage({
data: {
type: 'fromH5',
content: 'Hello from H5!'
}
});
}
</script>
</body>
</html>
注意事项:
- 域名限制:确保 H5 页面与父页面同域或已配置跨域权限。
- 环境支持:仅 H5 平台支持;App 平台需使用
uni.webViewAPI。 - 测试时使用 HTTPS 或本地服务器,避免协议问题。
通过以上步骤,点击 H5 页面的按钮即可触发父页面的 @message 事件。

