官方实例: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:

  onLoad(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。

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

  1. 微信小程序转发微信小程序转发

    微信小程序转发涉及以下4个方法: 1.Page.onShareAppMessage({}) 设置右上角“转发”配置,及转发后回调函数返回 shareTicket 票据 2.wx.showSahreMe ...

  2. 微信小程序转发功能

    微信小程序转发涉及以下4个方法: 1.Page.onShareAppMessage({}) 设置右上角“转发”配置,及转发后回调函数返回 shareTicket 票据 2.wx.showSahreMe ...

  3. 微信小程序转发商品的详情页 + 转发功能(传参)

    1.微信小程序转发传参,利用的还是onShareAppMessageapi 2.利用的还有json转换 JSON 是用于存储和传输数据的格式. JSON 通常用于服务端向网页传递数据 函数 描述JSO ...

  4. 微信小程序通过background-image设置背景图片

    微信小程序通过background-image设置背景:只支持线上图片和base64图片,不支持本地图片:base64图片设置步骤如下:1.在网站http://imgbase64.duoshitong ...

  5. 微信小程序-实现分享(带参数)

    微信小程序分享功能的实现方法有两种: 第一种 在page.js中实现onShareAppMessage,便可在小程序右上角选择分享该页面 onShareAppMessage: function () ...

  6. 微信小程序分享功能的path路径

    表示被微信小程序坑惨了 糟心的开始写,老板说先不上太复杂,就先显示了两个页面,然后开开心心的发布,测试了几遍,没啥问题呀.结果,一上上去,就被老板批了! 啥呀! 这分享怎么这个鬼样子!明明我看文档都是 ...

  7. 微信小程序的网络设置,及网络请求:wx.request(OBJECT)

    Md2All 一个Markdown在线转换工具 网址:http://md.aclickall.com 微信公众号:颜家大少本文所用排版工具:http://md.aclickall.com 支持通用的M ...

  8. 微信小程序 text属性设置 WXSS样式

    >微信小程序的布局css样式 参考自  珺L 文字 width: fit-content;font-size:20px;      /*设置文字字号*/color:red;           ...

  9. 微信小程序四(设置底部导航)

    好了 小程序的头部标题 设置好了,我们来说说底部导航栏是如何实现的. 我们先来看个效果图 这里,我们添加了三个导航图标,因为我们有三个页面,微信小程序最多能加5个. 那他们是怎么出现怎么着色的呢?两步 ...

  10. [转] 微信小程序 页面跳转 传递参数

    本文转自:http://blog.csdn.net/qq_31383345/article/details/52795212 微信小程序的页面跳转,页面之间传递参数笔记. CSDN微信小程序开发专栏, ...

随机推荐

  1. faker

    faker是一个生成伪造数据的Python第三方库,可以伪造城市,姓名,文班等各自信息,而且支持中文   安装 pip3 install faker   使用 # 导包 from faker impo ...

  2. JAVA语言学习-面向对象(1)

    类与对象 类 类是JAVA语言中重要的复合型数据类型().类的实现包括两个部分:成员变量和成员方法("方法"可以看作是C语言中的函数) 类的声明 要使用类,首先得对其声明.声明一个 ...

  3. OpenCV图像处理与视频分析详解

    1.OpenCV4环境搭建 VS2017新建一个控制台项目 配置包含目录 配置库目录 配置链接器 配置环境变量 重新启动VS2017 2.第一个图像显示程序 main.cpp #include< ...

  4. 嵌入式-C语言基础:数组指针

    定义一个数组指针,指向二维数组: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int (*p)[4];//定义二维指针数组 p=a;//指向二维数组 ...

  5. ssh免交互

    sshpass -p the_password ssh -o StrictHostKeyChecking=no root@domainname_or_ip remote_command  #远程执行命 ...

  6. Java开发学习(四十三)----MyBatisPlus查询语句之查询投影

    1.查询指定字段 目前我们在查询数据的时候,什么都没有做默认就是查询表中所有字段的内容,我们所说的查询投影即不查询所有字段,只查询出指定内容的数据. 具体如何来实现? @SpringBootTest ...

  7. WEB入门——爆破21-28

    WEB21 首先尝试网站后台常见登陆的弱口令,发现错误   则使用burp suite抓包试试看 通过分析,在未填入账号密码时,响应头如下所示: 填入弱口令账号密码,发现响应头如下: 则对应可知账号密 ...

  8. 《浅谈亚 log 数据结构在 OI 中的应用》阅读随笔

    这篇又长长长了! \(8435\to 8375\to 9729\) 早就馋这篇了!终于学了( 压位 Trie 确实很好写啊 但是总感觉使用范围不是很广的样子 似乎是见的题少 原文里都在用 \(\log ...

  9. Django基础笔记2(分页)

    Django Django自带的分页功能 from django.core.paginator import Paginator # 用于分页 curPage = request.GET.get('p ...

  10. 有来实验室|第一篇:Seata1.5.2版本部署和开源全栈商城订单支付业务实战

    在线体验:Seata实验室 一. 前言 相信 youlai-mall 的实验室大家有曾在项目中见到过,但应该都还处于陌生的阶段,毕竟在此之前实验室多是以概念般的形式存在,所以我想借着此次的机会,对其进 ...