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

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

时间:2023-01-12 16:33:46浏览次数:57  
标签:onload return 自定义 title 微信 onShareAppMessage promise 转发 path

官方实例: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后通过转发的卡片打卡小程序发现根本获取不到参数值。

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

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

 

 

官方说如果自定义promise,则分享信息以promise结果为准。

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

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

 

 

然而我们并没有拿到path的参数值,问题出在哪里呢?

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

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

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

所以如果要通过接口获取后端的参数,那么应该给promise配置完整的path参数,如果需要动态的背景图那也要在promise中设置imageUrl。

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。

以上两种都可以通过path传递参数了。

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

 

标签:onload,return,自定义,title,微信,onShareAppMessage,promise,转发,path
From: https://www.cnblogs.com/jying/p/17047035.html

相关文章

  • 用Python找出了删除自己微信的所有人并将他们自动化删除了
    哈喽兄弟们,今天我们来试试用Python找出了删除自己微信的所有人,并将他们自动化删除,免得每次看到感叹号心塞。这不,昨晚小姨子一个人喝多了喊我去接她,但是我睡到现在,刚发......
  • 使用python自动发送图片给微信好友
    使用python自动发送图片给微信好友由于pyautogui模块,可以基于UI操作鼠标和键盘,但是无法直接发送图片所以引入了pyperclip模块,直接在运行窗口,打开+复制图片,然后在微信输......
  • 微信小程序图片显示模式
     ......
  • 【微信小程序入门到精通】— button 超详细讲解
    对于目前形式,微信小程序是一个热门,那么我们该如何去学习并且掌握之后去做实际项目呢?为此我特意开设此专栏,在我学习的同时也将其分享给大家!本文主要给大家介绍一下button......
  • 在h5和微信小程序中修改checkbox、radia的样式
    由于引用了colorUI导致checbox的样式修改无效,因为colorUI的原因导致checkbox.uni-checkbox-input::before不显示。colorUI的main.css:switch.wx-switch-input::before,......
  • 微信分享
    <scriptsrc="/jquery.min.js"></script><scriptsrc="/jweixin-1.0.0.js"></script><script>varurl=location.href;url=url.replace(/&/g,"(")......
  • 微信小程序的商品详情html转小程序语法
    加强://对img添加额外数据if(node.tag==='img'){if(node.attr.src.indexOf("http")==-1){node.imgIndex=results.images.length......
  • 微信小程序基础控件,入门(2),
    ​scroll-view纵向滚动<viewclass="page-section-title"bindtap='toRefreshPage'><text>VerticalScroll\n纵向滚动</text></view><viewclass="pa......
  • 微信小程序的打包上线与分包
    微信小程序打包上线 打包上线前需要注意的地方需要获取真实的APPID,而不是测试号点击详情找到AppId点击修改,修改为真实的ID 打包上线的步骤第一步.填......
  • 微信支付-Sean遇到的那些问题
    现在,越来越多公司,选择借微信的势来发展自己的平台,进入工作没多久,Sean也被告知了要对接微信支付的需求。原本以为这样的对接,跟着文档走,应该没多大的难度的,可是后来,Sean才发......