转载注明出处:www.xdxxdxxdx.com,或者加入java学习群学习讨论:481845043java
有时候咱们先作好了微信站,而且印刷好了一些宣传材料,宣传材料上的二维码为原来微信站的二维码,可是咱们如今要主推小程序了,因此咱们但愿经过这些普通的二维码也能进入小程序的页面,这时候,咱们就须要学习本篇所讲的知识了。小程序
如下就来介绍如何经过普通二维码进入小程序页面。数组
由于普通的二维码访问的是普通的网页路径,怎么让微信识别到这是一个小程序的路径而不是普通的页面路径呢?这就须要到小程序后台去配置路径规则。举个例子来讲:我用www.xdxxdxxdx.com/article/23生成了一个二维码,很显然这是一个网站的二维码,可是我想要微信扫描这个二维码的时候,跳转到小程序的page/index/index。这时候就须要配置路径规则将两者绑定起来。微信
小程序后台--》设置--》开发设置--》扫普通连接二维码打开小程序,就能够添加普通连接路径与小程序路径的对应关系,以下图所示。app
上述咱们将www.wonyen.com/xcxxxxx这个路径规则与pages/index/index关联起来了,因此当咱们扫普通码的时候,只要这个码是以www.wonyen.com/xcxxxxx这个路径开头的二维码,好比www.wonyen.com/xcxxxxx?buy=1166。微信都会引导到小程序的pages/index/index页面来,而后咱们再在这个页面的js代码中去进行分发。把全部的访问都引导到首页,而后再进行分发,能够避免一些没必要要的麻烦事情发生。dom
先看代码,代码以下:学习
const app = getApp();
const prototype = require(
'../utils/prototype.js'
);
const dictionaries = {
buy:
'/pages/realCommodity/realCommodityDetail?realCommodityId='
,
shop:
'/pages/shop/index?merchantId='
,
orderList:
'/pages/orderList/orderList'
,
realOrderId:
'/pages/orderDetial/orderDetial?realOrderId='
}
const tabPage = [
'shoppingCart'
,
'orderList'
,
'userCenter'
]
const routeResult =
function
(parameter) {
if
(parameter.q) {
//解码并获取到参数的数组
const pmArray = decodeURIComponent(parameter.q).replace(app.domain +
'xcxRoute?'
,
''
).split(
'='
);
if
(dictionaries[pmArray[0]]) {
const result = {};
result.url = dictionaries[pmArray[0]] + (pmArray[1] ? pmArray[1] :
''
);
result.isTabPage = prototype.inArray(tabPage, pmArray[0]);
return
result
}
}
return
false
;
}
module.exports = {
routeResult: routeResult
}
|
咱们将路由分发的代码写成一个模块,以供其余页面调用。咱们用了数据字典将普通的二维码连接跟小程序的连接一一对应,好比buy对应的是/pages/realCommodity/realCommodityDetail?realCommodityId=。当有一个连接来的时候,咱们判断其parameter.q是否存在,存在则代表是普通的二维码连接,咱们须要根据数据字典找出其实际的小程序路径,而且判断其是不是tab页。并存入到返回值中。网站
在index.js里面,咱们先引入上述模块,而后在页面加载的时候判断连接是不是普通连接,若普通连接则调用上述模块来进行分发。ui
const routeDictionary = require(app.resource.util.routeDictionary);
const routeUrl = routeDictionary.routeResult(options);
//若是是经过扫普通二维码过来的,在这里进行分发转跳
if
(routeUrl) {
if
(routeUrl.isTabPage) {
wx.switchTab({
url: routeUrl.url,
})
}
else
{
wx.navigateTo({
url: routeUrl.url,
})
}
}