如何通过Chrome浏览器在JavaScript运行时主动抛出错误
你在控制台直接执行throw new Error()未触发全局错误处理的核心原因是:浏览器控制台的同步执行上下文自带异常捕获逻辑,抛出的错误会被控制台直接拦截,仅在控制台打印日志,不会冒泡到页面的window.onerror等全局错误监听回调。
可用的纯浏览器端测试方案
最通用的运行时错误触发方案
直接在控制台执行以下代码即可触发和页面原生报错完全一致的全局错误,所有全局错误监听、上报逻辑都会正常触发:setTimeout(() => { throw new Error('自定义测试错误') }, 0)原理:
setTimeout的回调会被放入浏览器宏任务队列,脱离控制台的同步捕获上下文,抛出的错误会直接冒泡到全局。模拟用户交互触发同步错误
如果需要测试同步执行场景的错误捕获,可给页面现有DOM绑定报错的事件回调,触发时即可产生真实的同步运行时错误:// 替换选择器为页面任意存在的可点击元素 document.querySelector('button').onclick = () => { const a = undefined; a.b.c }执行完上述代码后点击对应元素,即可触发错误。
测试Promise未捕获异常
若需要测试unhandledrejection类的Promise异常处理逻辑,直接执行以下代码即可:Promise.reject(new Error('Promise未捕获测试错误'))框架内置错误处理测试
如果你的错误处理是在Vue/React等框架内部封装的,可直接调用框架的上下文执行方法抛错,以Vue3为例:// 需确保你将app实例暴露到了window上,比如开发环境下可加 window.app = app app.runWithContext(() => { throw new Error('框架内部测试错误') })
内容的提问来源于stack exchange,提问作者Nevin
相关产品推荐
相关产品推荐

