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
相关产品推荐
相关产品推荐

