收藏
回答

小程序怎么实现每个页面都执行app.js中的代码片段啊?

我想做个埋点系统,有个配置自动上报pv统计,而不想一个一个页面去加代码上报。 但是app.js的代码只执行了一次,想每个页面都自动调用app.js中的一段代码,请问怎么做

回答关注问题邀请回答
收藏

9 个回答

  • 大Panda
    大Panda
    1天前

    请问题主这个问题处理好了吗???

    1天前
    有用
    回复
  • 萌萌萌
    萌萌萌
    09-01

    这个没什么难的。重写Page生命周期就好了。上面已经有例子了。

    我分析过ald,神策,growingio,他们的小程序埋点都是这么实现的。

    小程序端埋点,基本都绕不开劫持原始方法

    09-01
    有用
    回复
  • mamba
    mamba
    07-30
      var _Page = Page
      Page = function (options) {
        const { onLoad, onShow, onHide, onUnload } = options
    
        options.onLoad = function (opts) {
          onLoad && onLoad.call(this, opts)
        }
        options.onShow = function (opts) {
          onShow && onShow.call(this, opts)
          this._enterTime = +new Date()
          track('browse_page', {
            page: this.route,
            time: +new Date()
          })
        }
        options.onHide = function () {
          onHide && onHide.call(this)
          track('leave_page', {
            page: this.route,
            stay_time: +new Date() - this._enterTime
          })
        }
        options.onUnload = function () {
          onUnload && onUnload.call(this)
          track('leave_page', {
            page: this.route,
            stay_time: +new Date() - this._enterTime
          })
          clearTimeout(this.viewCallbackTimer)
          this.viewCallbackTimer = null
        }
        options.setViewCallback = function (timeout, callback) {
          this.viewCallbackTimer = setTimeout(() => {
            callback()
            clearTimeout(this.viewCallbackTimer)
            this.viewCallbackTimer = null
          }, timeout);
        }
    
        _Page(options)
      }
    
      const track = function (type, data) {
        console.log("\u3010Track\u3011 " + type, data)
      }
    
    
    07-30
    有用
    回复
  •  
     
    05-11

    在 app.js 里封装 Page 函数,比如下面是我工作中需要做国际化,所以在 app.js 中拦截了 Page 方法 在每个页面的 onLoad 函数里处理事情

    var page = Page;

    Page = function(options){

    let onLoad = options.onLoad;

    options.onLoad = function(options){

    wx.qyLanguage.initLanguage(this)

    onLoad.bind(this)(options)

    }

    page(options);

    05-11
    有用
    回复 3
    • 啊这
      啊这
      05-11
      看起来mta也是这么做的呢 能加wx详细咨询下么
      05-11
      回复
    •  
       
      05-11回复啊这
      fu632951357
      05-11
      回复
    • 鲸鱼
      鲸鱼
      07-28回复啊这
      楼主实践过了没?可行吗
      07-28
      回复
  • 浮小云
    浮小云
    05-11

    每个页面用getApp()调用app.js的内容

    若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人

    05-11
    有用
    回复 1
    • 啊这
      啊这
      05-11
      那就是每个页面都需要加代码呢
      05-11
      回复
  • 纸玫瑰
    纸玫瑰
    05-11

    正规的是写util里 每个页面引用

    05-11
    有用
    回复
  • Admin²⁰²⁰
    Admin²⁰²⁰
    05-11

    每个页面的onLoad里执行一次呗

    05-11
    有用
    回复 1
    • 啊这
      啊这
      05-11
      那样的话 每个页面都需要加代码呢
      05-11
      回复
  • 張加強
    張加強
    05-11

    在app.js 封装一个方法,根据业务需求在每个页面onLoad或onShow调用咯

    05-11
    有用
    回复 2
    • 啊这
      啊这
      05-11
      是看了 mta 埋点  初始化一次 全部页面都能统计PV 想实现这样的功能
      05-11
      回复
    • 張加強
      張加強
      05-11回复啊这
      都一样阿 各位大佬都说了只能每个页面都执行
      05-11
      回复
  • 拾忆
    拾忆
    05-11

    不可以的,还是做个组件每个页面加吧

    05-11
    有用
    回复 1
    • 啊这
      啊这
      05-11
      找了半天 没找到这样的api说明。。。 是mta埋点做到了这样。。
      05-11
      回复
登录 后发表内容
问题标签