window.addEventListener('pageshow', (e) => {
if (e.persisted) gtag('event', 'page_view', { page_path: location.pathname });
});
用户点返回回到列表页,页面没有任何请求,page_view 也没再发,报表里返回流量全是 0,实际用户明明回来了。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:Safari 和 Chrome 的往返缓存会把整页冻结,返回时直接恢复内存快照,不触发 load。只在 load 里发 page_view 的代码,恢复场景一次都不会执行。
「bfcache 页面浏览丢失」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
处理上按这个顺序:监听 pageshow,判断 event.persisted 为 true 时补发一次 page_view;同时处理 visibilitychange,从后台切回时按需补发;在真机上来回前进后退,确认每次返回都有记录。
确认没问题再收工,浏览器来回后退三次,报表里对应出现三次 page_view,时间和操作对得上。
