/**用户操作行为轨迹(统一采集触发元素点击事件) */ import { innertEvent } from './utils' class Behavior { private lastTrackTime: number = 0 constructor() { this.recordBehavior(); } sendBehavior(tagName: string, innerText: string) { innertEvent.trigger('behavior', { behaviorType: 'click', tagName: tagName, innerText: innerText }); } recordBehavior() { if(!window.addEventListener) return; // click监听 window.addEventListener('click', (e: Event) => { const ev = e || window.event; if (!ev) { return false; } const target: any = ev.target || ev.srcElement; if (!target) { return false; } if(typeof target !== 'object') { return false; } if(typeof target.tagName !== 'string') { return false; } const tagName = target.tagName.toLowerCase(); if (['body', 'html'].indexOf(tagName) > -1) { return false; } if(!target.parentNode || !target.parentNode.children){ return false; } let textContent = ''; if (target.textContent) { textContent = target.textContent.trim(); }else if(target.innerText){ textContent = target.innerText.trim(); } if (textContent) { textContent = textContent.replace(/[\r\n]/g, ' ').replace(/[ ]+/g, ' ').substring(0, 120); } const curTime = new Date().getTime(); if ((curTime - this.lastTrackTime)/1000 >= 0.5) { // 与上次触发事件相隔0.5秒以上可以再次发送 this.lastTrackTime = curTime - 0; this.sendBehavior(tagName, textContent) } }); } } export default Behavior