前言
接手的小程序比较老了,现在要求,全部要可以分享。
代码巴拉看了一下,40-50多个页面,目前只有首页可以分享,一个个的改脑瓜子疼。疼是一个问题,问题还没解决是另一个问题。
分析
全局改的话,肯定要知道小程序的全局api
开发者工具 console中打印
微信自带的原生方法。主要看getxxx什么的
看到一个router,文档看一下。好像没有,开放社区也没有
还有一个router
文档看下
wx.onAppRoute 这个可以用,
测试一下
// app.js
// 创建路由管理
const { router } = require('./router');
wx.onAppRoute && wx.onAppRoute(res => {
// beforeEach函数处理
router.beforeEach(res)
})
//router.js
router.beforeEach = function (e) {
console.log(e)
}
module.exports = {
router
}
打印结果
好像获取不到当前页面的一些钩子(不过可以做一些钩子,比如传参自动修改标题头)
试试获取当前页面栈
// route.js
router.beforeEach = function (e) {
const pages = getCurrentPages()
const view = pages[pages.length - 1]
console.log(view)
}
有了,代码中的函数方法也能获取到
不能修改wx的原型,这个api不知道啥时候就没了,
业务逻辑也要跟着改一下
- 当前的页面栈有是否有 onShareAppMessage 分享方法,如果有这个方法那么当前页面可以分享,没有跳过不处理
- webview不用处理,当前的业务不需要(看个人情况)
代码如下
//router.js
router.beforeEach = function (e) {
// 默认分享文案
const pages = getCurrentPages()
const view = pages[pages.length - 1]
if (view && view.onShareAppMessage) {
if (!view.onShareAppMessage()) {
view.onShareAppMessage = () => {
// 重写分享文案
return {
title: "分享文案",
path: `/${view.route}`
}
}
}
}
}
这样全局只要在页面中添加 onShareAppMessage 方法就可以了,如果需要定制化分享的话,写一个白名单 过滤掉当前的页面栈,不去重写就行了