小程式內引數和掃碼引數統一

海洋餅乾發表於2023-04-15

寫小程式的時候都會遇到掃碼引數和小程式內跳轉引數要分開處理的問題,但實際上引數和處理的方式都是一樣的,這裡封裝一種方法,將掃碼引數直接放到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
}

相關文章