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

window.onerror返回行号始终为1,如何获取正确错误行号?

解决window.onerror获取错误行号始终为1的问题

看起来你的基础错误监听逻辑是通的,但行号一直返回1通常是几个常见场景导致的,我来帮你逐一排查和解决:

1. 检查脚本是否是动态注入/内联执行的

如果你的代码是通过eval()、new Function(),或者用innerHTML把脚本直接插入到页面中,浏览器会把这些动态生成的脚本内容视为单一代码块,自然行号就会一直显示为1。

解决方法:

  • 把你的脚本代码放到独立的.js文件中,通过标准的<script>标签引入,而不是动态注入或内联在HTML里。这样浏览器就能正确解析文件中的行号了。

2. 排查跨域脚本的限制

如果你的脚本文件来自不同的域名(比如CDN或者其他子域名),浏览器出于安全策略会隐藏真实的错误行号,返回1或者0。

解决步骤:

  • 在托管脚本的服务器上设置CORS响应头:Access-Control-Allow-Origin: *(或者指定你的域名,更安全)
  • 在页面引入该脚本的<script>标签上添加crossorigin属性,比如:
    <script src="https://your-cdn-domain.com/script.js" crossorigin></script>
    
    这样浏览器就会暴露真实的错误行号和列号了。

3. 改用更可靠的错误监听方式

虽然window.onerror能用,但现在更推荐使用window.addEventListener('error', ...)来监听全局错误,它的兼容性更好,也不容易被其他代码覆盖。修改后的代码示例:

window.addEventListener('error', function(event) {
  const { message, filename, lineno, colno, error } = event;
  const prog = "fehler";
  const urlJ = `${server}${prog}${querystrJsonO}&qu=${qu}&msg=${message}&line=${lineno}&col=${colno}`;
  $.getJSON(urlJ, function(data) {});
});

额外提示

如果你的项目用了构建工具(比如Webpack),即使没有压缩代码,也要确保source map是正确生成并加载的——不过你说代码未压缩,这个可能不是主要问题,但可以检查一下构建配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:04:53