第三方脚本一报错 控制台只有一行 Script error. 点进去没有堆栈 文件名行号列号全是 0 同一份脚本放到本地却能打出完整调用链。乍看像缓存或者权限的锅,追下去往往不是。

curl -sI https://c.a.com/w.js | grep -i access-control
# 期望返回星号或当前页面所在域名

追下去是这么回事:跨域加载的脚本默认按不透明来源处理 浏览器出于安全把错误细节抹掉 只有 script 标签带 crossorigin 且响应里有 CORS 头 才拿得到真实信息。

「跨域脚本错误信息」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

具体做法是,先给这个脚本标签务必加上 crossorigin anonymous 让请求改走 CORS 模式去获取;确认第三方域名返回了 Access-Control-Allow-Origin 没有就找对方加上这个头;在 window.onerror 里判断 error 是否存在 不存在说明还被抹着 看不到真实错误。

验收就看一点,同样的报错能看到文件名行号和调用栈 回调里拿到的是真实 Error 对象。

作者 9823189