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