收藏
回答

为什么(wx.miniProgram.postMessage)方法传递的数据在小程序里面接收不到?

//我们项目是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这个接口,想问一下是什么原因,这个情况是偶发性的,概率很低

回答关注问题邀请回答
收藏

3 个回答

  • 社区技术运营专员--Demons
    社区技术运营专员--Demons
    2022-06-18

    请具体描述问题出现的流程,并提供能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    2022-06-18
    有用
    回复
  • Erwa
    Erwa
    06-04

    小程序只会在特定时机才收到H5页面传过来的消息。这些特定的触发时机包括:

    1. 页面后退(wx.navigateBack): 当用户点击小程序的返回按钮,或者小程序调用 wx.navigateBack API 返回上一页时,bindmessage 事件会被触发,小程序会收到 H5 页面在当前 web-view 实例生命周期内所有 postMessage 发送的数据。
    2. 组件销毁: 当 web-view 组件所在的页面被销毁时(例如,用户从当前页面跳转到另一个页面,或者关闭小程序),bindmessage 事件会被触发。
    3. 分享(wx.onShareAppMessage): 当用户点击右上角的分享按钮,并通过 wx.onShareAppMessage 分享小程序时,bindmessage 事件会被触发。


    页面后退,组件销毁(跳转到另外页面)可以直接在H5页面中调用下面这些API来完成:

    • wx.miniProgram.navigateTo
    • wx.miniProgram.navigateBack
    • wx.miniProgram.switchTab
    • wx.miniProgram.reLaunch
    • wx.miniProgram.redirectTo


    所以,在H5页面中做完 wx.miniProgram.postMessage 操作后,你还需要执行一下上面的这些API。不然小程序的回调函数不会被触发。

    需要注意的是,如果你的小程序第一个页面就嵌入了web-view,那么H5中没办法使用wx.miniProgram.navigateBack返回,因为这已经是第一个页面了。


    微信关于 postMessage 机制的文档很垃圾,很多人都没看明白,社区里面关于这个的问题从22年到现在一直有人提就是不完善。


    06-04
    有用
    回复
  • numb
    numb
    2022-06-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}`

                                    }

                                }

                            })

                        }

                    })


    2022-06-22
    有用
    回复
登录 后发表内容