公司有个小程序需要埋点,然后我看了之前的前辈写的代码,是每个页面在onshow onhide(或者在点击)等生命周期或者事件写的调用后端接口。这样就很麻烦,每个页面都要去写重复的代码。有没有简单点的方式?
嗯,这个可以有:
小程序每个页面的Page就是一个函数咯,那可不可以重写。。。。。。。。。
试试看
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
functionMyPage(options) { // 在Page函数中调用原生的Page函数,并传入options参数 const originalPage = Page; options = options || {}; // 重写options中的生命周期函数和事件处理函数 [\’onLoad\’,\’onShow\’,\’onHide\’,\’onUnload\’].forEach(function(key) { const originalFunc = options[key]; options[key] =function(options) { // 在生命周期函数中添加相应的埋点代码 console.log(`Page ${key} called`); if(originalFunc) { originalFunc.call(this, options); } } }); // 调用原生的Page函数,并传入重写后的options参数 returnoriginalPage(options); } |
试了一下好像OK耶,嗯。。。。。那………我们再把事件也加上吧,就变成了以下这样的了
function MyPage(options) {
// 在Page函数中调用原生的Page函数,并传入options参数
const originalPage = Page;
options = options || {};
// 重写options中的生命周期函数和事件处理函数
[\’onLoad\’, \’onShow\’, \’onHide\’, \’onUnload\’].forEach(function(key) {
const originalFunc = options[key];
options[key] = function(options) {
// 在生命周期函数中添加相应的埋点代码
console.log(`Page ${key} called`);
if (originalFunc) {
originalFunc.call(this, options);
}
}
});
[\’bindtap\’, \’bindlongpress\’, \’bindinput\’].forEach(function(key) {
const originalFunc = options[key];
options[key] = function(e) {
// 在事件处理函数中添加相应的埋点代码
console.log(`Event ${key} called`);
if (originalFunc) {
originalFunc.call(this, e);
}
}
});
// 调用原生的Page函数,并传入重写后的options参数
return originalPage(options);
}
在以上代码中,我们创建了一个新的MyPage函数,并重写了Page函数的行为。在重写的MyPage函数中,我们首先调用了原生的Page函数,并将options参数传递给它。然后,我们在options中找到生命周期函数和事件处理函数,并重写它们的行为,以便添加相应的埋点代码。在重写的生命周期函数中,我们添加了输出日志的代码,可以根据具体需求替换成实际的埋点代码。在重写的事件处理函数中,我们也添加了输出日志的代码,可以根据具体需求替换成实际的埋点代码。
接下来——————————————————————-
我们把页面的代码替换一下,将所有的Page函数改为MyPage函数。
|
1 2 3 4 5 |
Page({ data: { message:\’Hello, world!\’ } }) |
换成这样
|
1 2 3 4 5 |
MyPage({ data: { message:\’Hello, world!\’ } }) |
这样,就可以在所有页面中自动添加相应的埋点代码,从而实现全局埋点的需求。
