写小程序的时候都会遇到扫码参数和小程序内跳转参数要离开解决的问题,但实际上参数和解决的形式都是一样的,这里封装一种办法,将扫码参数间接放到 options 上面,这样就不须要离开独立解决,缩小冗余代码减少代码可读性和扩展性。
// 写在 app.js App 构造函数之前
// 微信小程序
const originalPage = Page
Page = function (app) {
let onload = app.onLoad
app.onLoad = function(options) {if (options.q) {let query = initParm(decodeURIComponent(options.q))
for(let item in query) {options[item] = query[item]
}
}
onload.call(this, options)
}
return originalPage(app)
}
// 支付宝小程序
const originalPage = Page
Page = function (app) {
let onload = app.onLoad
app.onLoad = function(options) {const qrCode = getApp().globalData.query ? getApp().globalData.query.qrCode : undefined
if (qrCode) {let query = initParm(qrCode)
for(let item in query) {options[item] = query[item]
}
}
onload.call(this, options)
}
return originalPage(app)
}
// 工具函数
function initParm(parm) {let queryStr = parm.split("?")[1]
let queryObj = {}
let result = ''
if(queryStr) {if(queryStr.indexOf('&') >= 0) {let query = queryStr.split('&')
for(let i = 0; i < query.length; i++) {result = query[i].split('=')
queryObj[result[0]] = result[1]
}
} else {result = queryStr.split('=')
queryObj[result[0]] = result[1]
}
}
return queryObj
}