小程序内嵌H5统计页面停留时长

时间:2025-02-06 11:25:48

小程序内嵌H5一直很坑爹,最近公司有个需求,需要统计用户在页面停留的时长,app和小程序都有内嵌H5的页面。

一开始想到的是window的onbeforeunload事件在页面离开时将页面编码和停留时长等上传服务器,

// 数据埋点
function pageCode(obj){
    var pageObj= {};
    var times = 0;
    var timer = setInterval(function(){
        times++;
        // (times)
    },1000);
     = function(){
        clearInterval(timer);
        // (obj);
        pageObj.page_time = times*1000;
        pageObj.page_code = (obj);
        $.get(url,pageObj,function(data){
            (data);
        })
    }
}

那么问题来了,由于顶部的返回是小程序和app控制的,如果是一级页面,即从小程序打开webview进入的第一个页面,返回时不触发onbeforeunload事件,二级页面返回一级页面时时触发的,这个时候自然想到的是如果是一级页面就通知小程序,让小程序自己做统计,

 (function (res) {
    ({
       data: {
           times: times,
           pageCode:"11111",
           type: 1
       }
    })
})

但是问题又来了,这些页面有可能是一级页面也有可能是二级页面,这就坑爹了吧,然后又想或许能解决,然后悲催的发现,从二级页面返回一级页面时,还是2,不会变成1,心累....

后来想到销毁webview时肯定有方法监听,那只要在销毁时让小程序统计就可以了,那时长怎么算呢?小程序向H5发送消息只能在进入的时候拼在url里,小程序onUnload时可以new个时间,使用bindload绑定onloadSuccess事件,onloadSuccess时也可以new个时间,这样就算出来了,而且确认在二级页面时这个onloadSuccess也是可以触发的,最终的解决方案是进入页面时postMessage,只传pageCode,

 (function (res) {
    ({
       data: {
           pageCode:"11111",
       }
    })
 })

onbeforeunload事件保留用在页面间的传递,小程序onloadSuccess时newDate,返回小程序首页销毁webview时onUnload再newDate,计算出停留时长并上传。