跨域脚本报错显示“script error.”是因浏览器安全策略屏蔽错误详情,需在script标签添加crossorigin="anonymous"属性、服务端返回access-control-allow-origin头,并改用window.addeventlistener('error')捕获堆栈。

跨域脚本报错只显示 “Script error.”,本质是浏览器出于安全考虑屏蔽了错误详情。这不是代码写错了,而是缺少必要的跨域授权配置。解决它不靠改逻辑,而在于让浏览器“允许你看到堆栈”。
确保跨域脚本带 crossorigin 属性
在引入外部 JS 文件的 <script></script> 标签中,必须显式添加 crossorigin 属性:
- 用
crossorigin="anonymous"(推荐):不发送 Cookie 或认证头,只需服务端返回Access-Control-Allow-Origin - 避免不加该属性:哪怕脚本域名只差一个 www 或协议不同(http/https),都会触发 Script Error
- 动态插入的 script 也要手动设置:
script.crossOrigin = 'anonymous'
服务端必须返回正确的 CORS 响应头
仅加 crossorigin 不够,CDN 或第三方服务器需响应以下头部:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
Access-Control-Allow-Origin: https://your-domain.com(精确匹配,生产环境别用*) - 若用了
crossorigin="use-credentials",还需加Access-Control-Allow-Credentials: true - 检查实际网络请求的 Response Headers,确认这些头真实存在(不是被 Nginx/Apache 误删)
错误捕获方式要适配跨域场景
window.onerror 对跨域错误支持弱,参数常为空。改用更可靠的事件监听:
- 用
window.addEventListener('error', e => { ... }),通过e.error?.stack获取堆栈 - 对 Promise 异步错误,单独监听
unhandledrejection事件 - 在 catch 块里,先判断
if (e instanceof Error),再取e.stack,避免对字符串报错取 stack 导致 undefined
开发阶段快速验证是否生效
加完配置后,可临时在控制台执行一段故意出错的跨域脚本调用,观察是否还能看到 “Script error.”:
- 如果输出变成类似
ReferenceError: xxx is not defined at app.js:12:5,说明配置成功 - 如果仍是 “Script error.”,优先检查 Network 面板里那个 JS 请求的 Response Headers 是否含 CORS 头
- Safari 和旧版 Edge 对跨域堆栈支持较弱,建议用 Chrome 或新版 Edge 测试
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










