|
|
@@ -0,0 +1,44 @@
|
|
|
+import { logger } from '../log/logger';
|
|
|
+
|
|
|
+/**
|
|
|
+ * 设置全局错误处理监听器
|
|
|
+ * 只在浏览器环境中生效
|
|
|
+ */
|
|
|
+export const setupGlobalErrorHandlers = () => {
|
|
|
+ // 只在浏览器环境中设置全局错误处理
|
|
|
+ if (typeof window === 'undefined') return;
|
|
|
+
|
|
|
+ // 处理未捕获的JavaScript错误和资源加载错误
|
|
|
+ window.addEventListener('error', (event) => {
|
|
|
+ const errorInfo = {
|
|
|
+ type: 'uncaught_error',
|
|
|
+ message: event.message,
|
|
|
+ filename: event.filename,
|
|
|
+ lineno: event.lineno,
|
|
|
+ colno: event.colno,
|
|
|
+ stack: event.error?.stack,
|
|
|
+ timestamp: new Date().toISOString()
|
|
|
+ };
|
|
|
+
|
|
|
+ logger.error('全局错误捕获', errorInfo);
|
|
|
+
|
|
|
+ // 可以选择是否阻止默认错误处理
|
|
|
+ // event.preventDefault();
|
|
|
+ });
|
|
|
+
|
|
|
+ // 处理未处理的Promise拒绝
|
|
|
+ window.addEventListener('unhandledrejection', (event) => {
|
|
|
+ const errorInfo = {
|
|
|
+ type: 'unhandled_rejection',
|
|
|
+ reason: event.reason,
|
|
|
+ timestamp: new Date().toISOString()
|
|
|
+ };
|
|
|
+
|
|
|
+ logger.error('未处理的Promise拒绝', errorInfo);
|
|
|
+
|
|
|
+ // 可以选择是否阻止默认错误处理
|
|
|
+ // event.preventDefault();
|
|
|
+ });
|
|
|
+
|
|
|
+ logger.log('全局错误处理监听器已设置');
|
|
|
+};
|