前言
今天在调整小程序项目获取参数的方法时,发现一直以来有个参数记错了,所以整理一下微信、支付宝、百度小程序的 App.onLaunch
参数的差别,大体相似,但还是有细微的区别。
正文
微信小程序
{ path: 'pages/handle/handle', // 启动小程序的路径 scene: '1037', // 场景值 query: { // 启动小程序的 query 参数 // 若没有启动参数,则返回一个空对象 // ... }, shareTicket: undefined, // string 类型,转发信息 referrerInfo: { // 来源信息 appId: '', // 来源小程序、公众号或者 App 的 AppId extraData: { // 来源小程序传过来的数据,scene=1037 或者 1038 时支持 // ... } } }
返回有效
referrerInfo
的场景有这些。
支付宝小程序
- 小程序首次启动时,
App.onLaunch
方法可获取query
、path
属性值。 - 小程序在后台被用 scheme 打开,也可从
App.onShow
方法中获取query
、path
属性值。
{ path: 'pages/handle/handle', // 当前小程序的页面地址,从启动参数 page 字段解析而来,page 忽略时默认为首页。 scene: '1037', // 场景值 query: { // 启动小程序的 query 参数 // 若没有启动参数,则不会返回 query 参数。这点跟微信小程序有区别 // ... }, referrerInfo: { // 来源消息 appId: '', // 来源小程序 sourceServiceId: '', // 来源插件,当处于插件运行模式时可见。(注意:基础库 1.11.0 版本开始支持) extraData: { // 来源小程序传过来的数据。 // ... } } }
百度小程序
需要注意的是,百度小程序之间跳转是通过
appKey
的,所以获取到的referrerInfo.appId
也是指appKey
。这点跟微信、支付宝小程序是有区别的。
{ path: 'pages/handle/handle', // 打开小程序的路径。 scene: '11700000', // 打开智能小程序的场景值,scene 值统一由百度小程序场景值管理中心在 B 端平台统一配置后下发到宿主(例如百度 App),调起协议中会携带相应入口的 scene 值。 query: { // 打开当前页面路径中的参数 // ... }, shareTicket: '', // 标记转发对象 referrerInfo: { // 从另一个小程序打开该小程序时,返回此字段 appId: '', // 来源小程序的 appKey extraData: { // 来源小程序传过来的数据 // ... } } }
三者的部分区别
1. query 来源:
- 微信小程序的
query
参数源于所打开页面路径的参数 - 支付宝小程序是区分全局参数与页面参数的,其
query
参数源于前者。
支付宝小程序
2. query 对象:
- 支付宝小程序
App.onLaunch
的options.query
参数、Page.onLoad
的options
参数应该是通过Object.create(null)
创建的对象,不能通过obj.constructor === Object
(结果为false
)来判断是否为对象类型。 - 微信小程序
App.onLaunch
的options.query
参数、Page.onLoad
的options
参数obj.constructor === Object
(结果为true
)