正如@Badgy 提到的,您可以安装一个 Vue 错误处理程序来捕获 Vue 遇到的错误。这可以按如下方式完成:
Vue.config.errorHandler = function (err, vm, info) {
// handle error
// `info` is a Vue-specific error info, e.g. which lifecycle hook
// the error was found in. Only available in 2.2.0+
}
上面的代码可以放在你喜欢的 javascript 中的任何位置。我在创建 vue 实例之前找到了代码。即在我的var app = new Vue({...}); 代码之前。因为它是一个全局的 vue 错误处理程序,它将处理来自所有 vue 实例以及 vue 组件的错误。我发现在实践中它主要捕获 vue 渲染方法中发生的错误。
您可以在此处的官方文档中阅读更多信息:https://vuejs.org/v2/api/#errorHandler
对于更一般的(非 vue 相关的)javascript 错误,您仍然需要一个全局错误处理程序,如下所示:
window.onerror = function (msg, url, line, col, error) {
//code to handle or report error goes here
}
同样,此代码可以放置在任何允许使用 javascript 的地方,但通常您希望将其放置在 javascript 堆栈的早期运行。您可以在此处阅读更多信息:https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror
最后,为了捕捉“Promise 拒绝”(即从 Promise 函数抛出的异常),我们需要监听 unhandledrejection 事件,因为 window.onerror 机制没有捕捉到 Promise 拒绝(感谢 @Blauhirn提示)。在某些浏览器(目前是 Chrome 和 Edge)中,可以使用以下方法捕获 Promise 拒绝:
window.addEventListener('unhandledrejection', function(event) {
//handle error here
//event.promise contains the promise object
//event.reason contains the reason for the rejection
});
有关更多信息,请参阅 StackOverflow 问题:Catch all unhandled javascript promise rejections