/* 访客埋点上报(真实访问统计) * 向 /api/visit/beacon 上报页面访问;30 分钟内的连续活动合并为一个会话。 * 注册/订阅成功时调用 window.visitTrack('register'|'subscribe') 上报转化事件。 */ (function(){ if (window.__visitTracked) return; window.__visitTracked = true; function send(evt, extra){ try { var body = { evt: evt || 'pageview', path: location.pathname, referer: document.referrer || '' }; if (extra) for (var k in extra) body[k] = extra[k]; var xhr = new XMLHttpRequest(); xhr.open('POST', '/api/visit/beacon', true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify(body)); } catch (e) {} } function beat(){ try { send('heartbeat'); } catch (e) {} } send('pageview'); // 5 分钟心跳,延长会话在线时长 setInterval(beat, 5 * 60 * 1000); // 页面隐藏时上报一次,便于计算停留时长 document.addEventListener('visibilitychange', function(){ if (document.visibilityState === 'hidden') send('leave'); }); window.visitTrack = function(evt, extra){ send(evt, extra); }; })();