我有一个相当复杂的Web应用程序,用于记录用户操作。
我的日志之一是查看用户离开页面之前滚动了多远。在我的Main.js组件中,这很简单,就像这样:
componentDidMount(){
if (typeof window !== 'undefined') {
this.debouncedScrollHandler = debounce(this.registerScrollHandlers.bind(this), 100);
window.addEventListener('scroll', this.debouncedScrollHandler);
window.addEventListener('beforeunload', this.flushScrollLogs);
}
}
maxScrollDepth = 0;
debouncedScrollHandler = () => {};
registerScrollHandlers() {
if (this.maxScrollDepth < window.scrollY) {
this.maxScrollDepth = window.scrollY;
}
}
flushScrollLogs = () => {
log(this.maxScroll);
};
log
方法是一个全局记录器,也已挂接到beforeunload上。当该事件触发时,日志记录方法会将其所有日志刷新到服务器。如果在上述刷新之前调用了该刷新,则它将永远不会记录最大滚动,因为页面将在实际发送日志到服务器之前退出。
是否有一种方法可以强制日志记录实用程序beforeunload
处理程序在事件处理程序列表中排在倒数第二个?