微信小程序转发onShareAppMessage设置path参数后在onload获取不到值的原因和解决方法

科技资讯 投稿 7600 0 评论

微信小程序转发onShareAppMessage设置path参数后在onload获取不到值的原因和解决方法

https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html#onShareAppMessage-Object-object

Page({
  onShareAppMessage( {
    const promise = new Promise(resolve => {
      setTimeout(( => {
        resolve({
          title: '自定义转发标题'
        }
      }, 2000
    }
    return {
      title: '自定义转发标题',
      path: '/page/user?id=123',
      promise 
    }
  }
}

直接把该段代码复制到你的项目测试,可以打开分享的转发。

在官方实例代码基础上添加onload:

onLoad(query { console.log("链接参数", query; wx.showToast({ title: JSON.stringify(query }; }

 

通过修改实例中的title值测试发现分享后title确实变化了。

Page({ onShareAppMessage( { const promise = new Promise(resolve => { setTimeout(( => { resolve({ title: '自定义转发标题promise' } }, 500 } return { title: '自定义转发标题', path: '/page/user?id=123', promise } } }

 

当我把promise删掉了,发现可以通过打开分享出去的卡片拿到参数了,所以问题出在这个promise上。

由此推断:promise覆盖了默认定义的return的值,当promise里没有设定某个值的时候,会使用系统默认的值而不会使用自定义的值。比如上面我们在promise中定义了title值,但是没有定义path值,此时即使return中定义了path,但promise中的path=null会覆盖掉return中的path,所以启用了微信小程序默认的path=当前页面。

这就可以解释为什么有的提问说明明自己定义了path值等于某个页面,但通过卡片打开的依然是当前页面,应该是设置了promise而里面没有path路径。

Page({
  onShareAppMessage( {
    const promise = new Promise(resolve => {
      setTimeout(( => {
        resolve({
          title: '自定义转发标题promise',
          path: '/pages/test/test?id=1111&uname=test001'
        }
      }, 500
    }
    return {
      title: '自定义转发标题',
      path: '/pages/test2/test2?id=123',
      imageUrl: '/imgs/tx.png', // 此处不会生效,会使用当前页的截图
      promise 
    }
  }
}

需要注意:官方文档里提到了,假如promise超过3秒没有返回结果,那么就会使用自定义的return值,可以通过设置setTime=3500来测试。

Page({ onShareAppMessage( { const promise = new Promise(resolve => { setTimeout(( => { resolve({ title: '自定义转发标题promise', path: '/pages/test/test?id=1111&uname=test001' } }, 3500 } return { title: '自定义转发标题', path: '/pages/test2/test2?id=123', imageUrl: '/imgs/tx.png', promise } } }

上面即使设置了promise,但因为返回时长为3.5秒,所以不生效,会跳转到自定义的test2页面,背景图为自定义的tx.png。

ps:官方实例代码里配置的path路径是page/user,该方式已经过时,现在的配置方式是/pages/user/user。

 

编程笔记 » 微信小程序转发onShareAppMessage设置path参数后在onload获取不到值的原因和解决方法

赞同 (32) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽