uniapp开发小程序的过程中主、分包有大小限制,随着业务的增加,使用web-view加载H5的方式,往往纯加载并不能满足业务需求,这个时候就得了解小程序与H5的交互。
提示:以下是本篇文章正文内容,下面案例可供参考
web-view 是微信小程序内置的浏览器组件,用来加载网络html。
<template>
<web-view src="https://www.xxx.html">web-view>
template>
注意:
<template>
<web-view src="https://www.xxx.html?id=1&from=xcx">web-view>
template>
解决:小程序地址路径?传参 — H5onLoad函数接收
// H5
// H5获取拼接的url参数
解决:H5触发事件并发送内容 — web-view @message事件监听处理
<template>
<web-view src="https://www.xxx.html" @message="onMessage">web-view>
template>
<script>
export default {
data() {
return {};
},
methods: {
onMessage(event) {
console.log('接收到消息:' + JSON.stringify(event.detail.data));
// 跳转小程序方法
uni.navigateToMiniProgram({
appId: data.appId,
path: data.path,
extraData: data.extraData
});
}
}
};
script>
// H5
// H5触发事件并发送内容
document.addEventListener('click', function() {
uni.postMessage({
data: {
appId: '',
path: '',
extraData: ''
}
});
})
解决:H5调用支付下单接口 — 携带参数跳转到小程序里去完成支付 — 支付后携带参数回跳H5 — H5接收参数判断支付是否成功
<template>
<web-view :src="url">web-view>
template>
<script>
export default {
data() {
return {
url: ''
};
},
onLoad(option){
//有支付订单进行支付
if (option.idNo) {
const item = JSON.parse(decodeURIComponent(option.data));
this.requestPayment(item);
}
},
methods: {
requestPayment(item) {
console.log(item);
uni.requestPayment({
provider: 'wxpay',
signType: item.signType || 'MD5',
timeStamp: item.timeStamp,
nonceStr: item.nonceStr,
package: item.package,
paySign: item.paySign,
success: res => {
// 回跳地址携带支付状态参数,便于H5判断
// 支付成功
this.url += '&payStatus=success';
},
fail: err => {
// 支付失败
this.url += '&payStatus=fail';
}
});
}
}
};
script>
// H5
本文简单介绍了小程序web-view与H5的一些交互,若有其他更好的交互方式,欢迎评论区补充。
未完待续...