分析
可能导致白屏及错误原因
- 代码错误,最多的是获取
a.b, 当a为undefined时代码异常 - 请求异常,没有catch异常
- 代码逻辑错误,没有报错,但是白屏了
异常捕获
-
window.onerror 捕获代码错误
window.addEventListener('error', function (event) { console.log('!!!addEventListener', event); }) -
promise error 捕获(包含接口异常,then方法内语法错误)
window.addEventListener("unhandledrejection", function(e) { e.preventDefault() console.log('我知道 promise 的错误了'); console.log(e.reason); return true; }); -
console.error代理
var consoleError = window.console.error; window.console.error = function () { consoleError && consoleError.apply(window, arguments); }; -
React组件错误,包装根节点,捕获所有子节点的错误
class ErrorBoundary extends React.Component { componentDidCatch(error, errorInfo) { console.log('!!!ErrorBoundary', error, errorInfo) } render() { return this.props.children; } } <ErrorBoundary><Routers /></ErrorBoundary> -
vue全局捕获
Vue.config.errorHandler = function (err, vm, info) {} -
资源404,在加载资源前注册事件
<script type="text/javascript"> window.addEventListener('error', function(e) { console.log(e); }, true); </script> -
接口异常捕获
// 封装请求库,统一的异常处理 export default requst(...arg) { return axios(...arg) }