uni-app写的H5无法与uni-app写的小程序webview之间通讯
uni-app写的H5无法与uni-app写的小程序webview之间通讯
代码示例
<body>
<div id="app"><!--app-html--></div>
<script type="module" src="/main.js"></script>
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
<script type="module" src="/utils/uni.webview.js"></script>
</body>
在外层 index.html
里引入的文件按文档里下的最新版本。
代码片段
onLoad((option) => {
document.addEventListener('UniAppJSBridgeReady', function() {
uni.webView.getEnv(function(res) {
console.log('当前环境:' + JSON.stringify(res));
});
// uni.webView.navigateTo(...)
});
})
这是在首页调用的方法,接收不到 console
输出。
2 回复
document.addEventListener(‘UniAppJSBridgeReady’ 这个在小程序里没触发
在uni-app中,实现H5页面与小程序内嵌的WebView组件之间的通讯,可以通过一些特定的方法来实现。这里我们主要利用小程序提供的 postMessage
API 以及 H5 页面中的监听机制。
小程序端代码
首先,在小程序中使用 web-view
组件加载H5页面,并定义一个函数来向H5页面发送消息。
// pages/index/index.js
Page({
data: {
webViewUrl: 'https://your-h5-page-url.com' // 替换为你的H5页面URL
},
onLoad() {
this.webViewContext = wx.createWebViewContext('web-view-id', this);
},
sendMessageToH5() {
this.webViewContext.postMessage({
data: 'Hello from Mini Program!'
});
}
});
<!-- pages/index/index.wxml -->
<view>
<button bindtap="sendMessageToH5">Send Message to H5</button>
<web-view id="web-view-id" src="{{webViewUrl}}"></web-view>
</view>
H5端代码
在H5页面中,需要监听来自小程序的消息。可以使用 message
事件来实现。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>H5 Page</title>
</head>
<body>
<h1>H5 Page</h1>
<script>
// 监听来自小程序的消息
window.addEventListener('message', function(event) {
// 确保消息来源是可信的(可选)
if (event.origin !== 'https://your-mini-program-domain.com') { // 替换为你的小程序域名
return;
}
console.log('Message from Mini Program:', event.data);
// 在这里处理接收到的消息
alert('Received from Mini Program: ' + event.data.data);
});
// 发送消息给小程序(如果需要双向通讯)
function sendMessageToMiniProgram(data) {
if (window.WeixinJSBridge) {
WeixinJSBridge.invoke('postMessageToMiniProgram', { data: data }, function(res) {
console.log('Message sent to Mini Program:', res);
});
}
}
</script>
</body>
</html>
注意事项
- 安全性:在实际应用中,务必验证消息的来源,确保消息是从可信的小程序域名发送的。
- 跨域问题:确保小程序和H5页面的域名已经配置在微信公众平台的业务域名中。
- 兼容性:不同版本的微信客户端可能对WebView的API支持有所不同,测试时需注意。
通过以上代码,你可以在uni-app中实现H5页面与小程序WebView之间的通讯。