CostPrediction/frontend/src/utils/errorHandler.js
2024-11-09 00:16:19 +08:00

73 lines
2.0 KiB
JavaScript

// 处理 ResizeObserver 错误
const resizeHandler = () => {
const resizeObserverErrors = [
"ResizeObserver loop completed with undelivered notifications.",
"ResizeObserver loop limit exceeded",
"ResizeObserver loop completed"
]
// 添加全局错误处理
const handler = (event) => {
if (event && event.message && resizeObserverErrors.includes(event.message)) {
event.stopPropagation()
event.preventDefault()
event.stopImmediatePropagation()
return false
}
}
// 添加多个事件监听器
window.addEventListener('error', handler, true)
window.addEventListener('unhandledrejection', handler, true)
// 添加 ResizeObserver 错误处理
if (window.ResizeObserver) {
const resizeObserverPrototype = ResizeObserver.prototype
const originalObserve = resizeObserverPrototype.observe
resizeObserverPrototype.observe = function (...args) {
try {
return originalObserve.apply(this, args)
} catch (e) {
if (resizeObserverErrors.includes(e.message)) {
return null
}
throw e
}
}
}
}
export default {
install: (app) => {
resizeHandler()
// 添加全局错误处理器
app.config.errorHandler = (err, vm, info) => {
const resizeObserverErrors = [
"ResizeObserver loop completed with undelivered notifications.",
"ResizeObserver loop limit exceeded",
"ResizeObserver loop completed"
]
if (err && err.message && resizeObserverErrors.includes(err.message)) {
return
}
console.error('Vue Error:', err, info)
}
// 添加全局警告处理器
app.config.warnHandler = (msg, vm, trace) => {
const resizeObserverErrors = [
"ResizeObserver loop completed with undelivered notifications.",
"ResizeObserver loop limit exceeded",
"ResizeObserver loop completed"
]
if (resizeObserverErrors.includes(msg)) {
return
}
console.warn('Vue Warning:', msg, trace)
}
}
}