window.onerror错误捕获事件

3,138 阅读1分钟

当JavaScript运行时错误(包括语法错误)发生时,window会触发一个ErrorEvent接口的error事件,并执行window.onerror()。

当一项资源(如<img>或<script>)加载失败,加载资源的元素会触发一个Event接口的error事件,并执行onerror()处理函数。这些error事件不会向上冒泡到window。

加载一个全局的error事件处理函数可用于自动收集错误报告。

语法

window.onerror = function (message, source, lineno, colno, error) {
  console.log(message, source, lineno, colno, error)
  console.log(source)
  console.log(lineno)
  console.log(colno)
  console.log(error)
  errorMonitor(message, source, lineno, colno, error);
  return true
}

参数:

  1. message:错误信息(字符串)。
  2. source:发生错误的脚本URL(字符串)
  3. lineno:发生错误的行号(数字)
  4. colno:发生错误的列号(数字)
  5. error:Error对象(对象)

除了以上参数,该事件还可以返回true,阻止执行默认事件。

注意事项 - 跨域

在不同域中的语法发生错误的时候,为避免信息泄露,语法错误的细节将不会报告,而代之简单的"Script error."。

在某些浏览器中,通过<script>标签使用crossorigin属性并要求服务器发送适当的 CORS HTTP 响应头,该行为可被覆盖。

window.onerror = function (message, source, lineno, colno, error) {
  if(message == 'Script error.') {
    console.log('js无法访问,请通过浏览器控制台查看详情')
    return false
  }
  console.log(message, source, lineno, colno, error)
  return true
}

若无法避免可以在返回Script error.的情况下告知通过浏览器控制台查看。