小程序记录页面停留时间
小程序记录页面停留时间的传统做法,每个页面的onshow开始计时,onhide和onUnload停止计时,但每个需要加载的页面都要调用一遍方法,比较麻烦,现可以在app.js 中写入全局方法,具体如下:
1、在全局方法中定义变量,记录需要计时的页面,如:
tracksPages: ["subPackages/shop/shop"],
2、在app.js中重新封装onShow、onUnload、onHide方法
const originPage = Page;
Page = (page) => {
const { tracksPages } = global;
let originOnShowMethod = page["onShow"] || function () {};
page["onShow"] = function (options) {
const pageObj = getCurrentPages();
const { route } = pageObj[pageObj.length - 1];
if (tracksPages.indexOf(route) >= 0) {
//开始计时
page.start_time = new Date();
page.can_track = true;
}
originOnShowMethod.call(this, options);
};
let originOnUnloadMethod = page["onUnload"] || function () {};
page["onUnload"] = function (options) {
let pageObj = getCurrentPages();
const { route } = pageObj[pageObj.length - 1];
//停止计时
if (tracksPages.indexOf(route) >= 0 && page.can_track) {
page.can_track = false;
const page_stay_time = (new Date() - page.start_time) / 1000;
}
originOnUnloadMethod.call(this, options);
};
let originOnHideMethod = page["onHide"] || function () {};
page["onHide"] = function (options) {
let pageObj = getCurrentPages();
const { route } = pageObj[pageObj.length - 1];
//停止计时
if (tracksPages.indexOf(route) >= 0 && page.can_track) {
page.can_track = false;
const page_stay_time = (new Date() - page.start_time) / 1000;
}
originOnHideMethod.call(this, options);
};
return originPage(page);
};