js 错误监听方法

本文详细介绍了前端开发中常见的错误监听方法,包括静态资源加载错误和JS执行错误的捕获,探讨了error事件、onerror事件及Promise异常的处理方式,并提供了Vue项目的错误处理策略。

错误监听过程大概分为两部分,静态资源加载错误和js文本执行错误

1:静态资源加载错误的捕获方法

方法一:

借助于error事件,这个事件既可以静态资源加载出错,也可以监听js执行过程中的错误。具体错误的类型可以根据srcElement属性进行区分,如果监测js执行过程中的错误,注意静态资源的跨域问题。

跨域解决方法:后端设置方法与跨域携带cookie方法一致,前端需要在script标签上添加crossorigin="use-credentials"

window.addEventListener('error',  args => {

console.log('error event:', args);

return true;

}, true)

方法二:

手动创建script(其他资源创建其他标签)标签,利用script标签的onerror以及 onload事件

onerror:当资源请求不到时,执行。注意 当js文件执行过程中报错,监听不到,用别的方法

onload:当资源请求成功时,执行。

2:监听js执行错误

可以借助于上面方法监听,也可以使用onerror事件。解决跨域资源文件方法与上面一致

window.onerror = function(message, source, lineno, colno, error) {

console.log(message, source, lineno, colno, error, '----')

}

3:Promise异常捕获

使用unhandledrejection事件即可

window.addEventListener("unhandledrejection", e => {

  throw e.reason

});

vue项目处理方法:

js的加载过程错误监听与上面一致,js的执行错误只需要借助vue的机制即可

Vue.config.errorHandler = (err, vm, info) => {

}

如果使用了vue的错误监听,error事件将不再生效。同时vue的错误监听也能监听promise的异常

 

JS:

window.onerror = function(message, source, lineno, colno, error) {

console.log(message, source, lineno, colno, error)

}

window.addEventListener('error', args => {

if(args.target.tagName == 'SCRIPT') {

console.log('script:', args.target.src);

} else if(args.target.tagName == 'LINK') {

console.log('link:', args.target.href);

} else if(args.target.tagName == 'IMG') {

console.log('img:', args.target.src);

}

return true;

},true )



// 动态创建dom

let script= document.createElement('link');

script.href= "https://seals.fangxin.c/ipri/js/sck.c2901f63b6857ee13f1a.js"; // 没有这个脚本

script.rel = 'stylesheet';

document.body.append(script);

script.onerror = function(err) {

console.log("Error loading ", err); // Error loading https://example.com/404.js

};

script.onload = function() {

console.log("Error loading "); // Error loading https://example.com/404.js

};

 


 

### 如何使用 `vue-logger` 监听 JavaScript 错误 为了有效地监控和记录Vue应用程序中的JavaScript错误,可以集成第三方库如 `vue-logger` 来实现这一功能。下面介绍一种最佳实践方式来设置并使用该插件。 #### 安装依赖包 首先,在项目根目录下执行npm安装命令以引入必要的软件包: ```bash npm install vue-logger --save ``` #### 初始化配置 接着,在入口文件(通常是main.js)里注册这个全局组件,并对其进行初始化操作: ```javascript import Vue from 'vue'; import Logger from 'vue-logger'; // 配置日志级别和其他选项 const loggerOptions = { level: process.env.NODE_ENV === 'production' ? 'error' : 'debug', }; Vue.use(Logger, loggerOptions); new Vue({ render: h => h(App), }).$mount('#app'); ``` 此处的日志等级可以根据环境变量自动调整;生产环境中仅捕获严重程度较高的事件,而在开发阶段则允许更详细的调试信息被打印出来[^1]。 #### 自定义错误处理函数 为了让应用能够捕捉到未被捕获的异常以及资源加载失败的情况,还需要重写默认的错误处理器: ```javascript window.onerror = function(message, source, lineno, colno, error) { const errorMessage = `${message} at line ${lineno}, column ${colno}`; if (process.env.NODE_ENV !== 'production') { console.error('Uncaught Error:', errorMessage); } this.$log.error(errorMessage); return true; }; ``` 这段代码会拦截所有的同步脚本错误并将它们传递给 `$log.error()` 方法以便进一步分析或上报至服务器端存储系统中去[^2]。 对于异步任务引发的问题,则可以通过覆盖 `Promise.rejectionHandled` 事件来进行类似的处理逻辑扩展[^3]。 #### 组件内部调用 除了上述全局级别的设定外,也可以在特定视图内手动触发日志记录动作。比如当某个API请求返回了意料之外的状态码时就可以这样做: ```javascript axios.post('/someEndpoint') .then(response => {}) .catch(error => { this.$log.warn(`Request failed with status code ${error.response.status}`); }); ``` 这样不仅有助于快速定位线上故障原因所在之处,同时也方便团队成员之间共享排查思路与经验教训。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值