You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript的SyntaxError为何是字符串而非对象?如何获取更多错误信息?

解决window.onerror无法获取语法错误详细信息的问题

首先明确:window.onerror的回调函数并非接收单个Error对象作为参数,它的标准参数列表是:
message: string, source: string, lineno: number, colno: number, error: Error

你之前只声明了一个error参数,实际上这个参数对应的是第一个参数message(错误信息字符串),这就是为什么你拿到的是字符串类型,而非包含stack、行号的Error对象。

正确的写法示例

将回调改为接收完整参数,就能获取错误的详细位置和堆栈信息:

window.onerror = function(message, source, lineno, colno, error) {
  // 错误内容
  console.log('错误信息:', message);
  // 出错的脚本地址
  console.log('脚本地址:', source);
  // 出错行号
  console.log('行号:', lineno);
  // 出错列号
  console.log('列号:', colno);
  // 完整Error对象(包含stack)
  if (error) {
    console.log('错误堆栈:', error.stack);
  }
};

关键说明

当动态加载的脚本存在语法错误时,浏览器触发window.onerror时,完整的Error对象会传递给第五个参数,前四个参数则直接提供错误发生的具体位置信息,刚好满足你获取错误位置的需求。

额外注意点

如果动态加载的是跨域脚本,浏览器可能因同源策略限制,无法返回完整的Error对象和具体行号(会显示0)。这种情况需要在脚本所在服务器配置CORS响应头,同时在加载脚本的<script>标签上添加crossorigin属性。

内容的提问来源于stack exchange,提问作者user1636349

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:04:54