您当前的位置:首页 > 文章 > 小程序埋点方案思路及部分实现

小程序埋点方案思路及部分实现

作者:疾风_剑豪 时间:2024-01-02 阅读数:365 人阅读

公司有个小程序需要埋点,然后我看了之前的前辈写的代码,是每个页面在onshow  onhide(或者在点击)等生命周期或者事件写的调用后端接口。这样就很麻烦,每个页面都要去写重复的代码。有没有简单点的方式?

嗯,这个可以有:

  小程序每个页面的Page就是一个函数咯,那可不可以重写。。。。。。。。。

  试试看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);
      }
    }
  });
  // 调用原生的Page函数,并传入重写后的options参数
  return originalPage(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!'
  }
})

  这样,就可以在所有页面中自动添加相应的埋点代码,从而实现全局埋点的需求。

本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com