//我们项目是h5项目嵌套在小程序里面的,下面是h5项目里面的代码
wx.miniProgram.getEnv(function (res) {
if (res.miniprogram) {
//我们在此处加了记录日志接口,确定代码已经进入了走到了这里
wx.miniProgram.postMessage({
data: {
shareInfo: {
title: '身故受益人变更',
domain: encodeURIComponent(`${ENV.domain}/wechatmobile/dist/index.html`),
url: encodeURIComponent(`/webapp/pService/faceDirect?policyNo=${ENV.policyNo}&recId=${recId}&ISEE_BIZ=${that.ISEE_BIZ}&redirect=applychange&role=2`),
requestPath: `${ENV.ip}/api/v1/beneficiaryChg/wechattemplatepush/transmitCallBack?policyNo=${ENV.policyNo}&recId=${recId}`
}
}
})
}
})
//下面是小程序的代码
在用户进行转发操作之后,小程序转发方法里面的
wx.request({
url: _requestPath,
success: (res) => {
console.log(res, 计时成功)
}
})
这个方法里面没有请求从h5里面传过来的requestPath这个接口,想问一下是什么原因,这个情况是偶发性的,概率很低
请具体描述问题出现的流程,并提供能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。
小程序只会在特定时机才收到H5页面传过来的消息。这些特定的触发时机包括:
wx.navigateBack
API 返回上一页时,bindmessage
事件会被触发,小程序会收到 H5 页面在当前web-view
实例生命周期内所有postMessage
发送的数据。web-view
组件所在的页面被销毁时(例如,用户从当前页面跳转到另一个页面,或者关闭小程序),bindmessage
事件会被触发。wx.onShareAppMessage
分享小程序时,bindmessage
事件会被触发。页面后退,组件销毁(跳转到另外页面)可以直接在H5页面中调用下面这些API来完成:
所以,在H5页面中做完 wx.miniProgram.postMessage 操作后,你还需要执行一下上面的这些API。不然小程序的回调函数不会被触发。
需要注意的是,如果你的小程序第一个页面就嵌入了web-view,那么H5中没办法使用wx.miniProgram.navigateBack返回,因为这已经是第一个页面了。
微信关于 postMessage 机制的文档很垃圾,很多人都没看明白,社区里面关于这个的问题从22年到现在一直有人提就是不完善。
var that = this;
wx.miniProgram.getEnv(function (res) {
if (res.miniprogram) {
//
wx.miniProgram.postMessage({
data: {
shareInfo: {
title: '身故受益人变更',
domain: encodeURIComponent(`${ENV.domain}/wechatmobile/dist/index.html`),
url: encodeURIComponent(`/webapp/pService/faceDirect?policyNo=${ENV.policyNo}&recId=${recId}&ISEE_BIZ=${that.ISEE_BIZ}&redirect=policypapers&role=1`),
requestPath:`${ENV.ip}/api/v1/beneficiaryChg/wechattemplatepush/insuredTransmit?policyNo=${ENV.policyNo}&recId=${recId}`
}
}
})
}
})