站点设置
- 使用requireJS,我们在页面上加载了一堆模块
- 我们有一个全局错误处理程序(window.onError),它将任何 JS 错误发送到我们的跟踪服务器
- 我们
onbeforeunload
设置了一个处理程序,所以当访问者离开页面时,我们设置了一个全局变量window.exitting = true
来表示应该忽略任何更多的 JS 错误,因此不会向我们报告
以下是相关的代码部分:
if (typeof window.onbeforeunload != 'undefined') {
if (window.addEventListener) {
window.addEventListener('beforeunload', function() {window.exitting = true;}, false);
} else if (window.attachEvent) {
window.attachEvent('onbeforeunload', function() {window.exitting = true;});
}
}
window.onerror = function() {
// do not log false errors when navigating away
if (window.exitting) return true;
// ... code that sends this error to us follows here
};
问题
在某些页面上,我们使用Visual Website Optimizer进行 A/B 测试,在加载时将页面重定向到不同的 URL。这很可能导致所有正在加载的脚本停止,并触发requireJS 自己的 onError 函数。然后这个函数将抛出一个 JS 错误,现在应该被我们上面的全局错误处理函数忽略。但事实并非如此。
相反,我们在跟踪服务器中记录了很多误报,这根本不会破坏访问者的页面。
似乎该onbeforeunload
函数根本没有设置全局变量,所以我们的全局错误处理程序仍然将所有那些不重要的错误记录到我们的服务器中。
对此有什么想法吗?我们现在已经没有想法了。