关于javascript:小程序内参数和扫码参数统一

6次阅读

共计 1016 个字符,预计需要花费 3 分钟才能阅读完成。

写小程序的时候都会遇到扫码参数和小程序内跳转参数要离开解决的问题,但实际上参数和解决的形式都是一样的,这里封装一种办法,将扫码参数间接放到 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
}
正文完
 0