加了crossorigin仍是“script error.”,因服务端未返回access-control-allow-origin响应头、cdn缓存旧响应、本地file://协议忽略该属性、或crossorigin="use-credentials"与access-control-allow-origin:*冲突所致。

为什么加了 crossorigin 还是 “Script error.”?
这不是前端代码写错了,是浏览器安全策略硬性限制:跨域脚本出错时,默认只暴露 "Script error.",message、filename、lineno 全为空。加 crossorigin 是必要条件,但不是万能钥匙。
- 服务端没返回
Access-Control-Allow-Origin响应头 → 请求被拦截或错误被屏蔽,控制台可能报 CORS error 或静默失败 - 服务端返回了
Access-Control-Allow-Origin: *,但你用了crossorigin="use-credentials"→ 浏览器直接拒绝响应(* 和凭据互斥) - 本地双击打开 HTML(
file://协议)→crossorigin被完全忽略,错误永远只有"Script error." - CDN 缓存了旧响应(没带 CORS 头)→ 即使改了配置,浏览器仍复用脏缓存,建议在
src后加时间戳参数临时绕过
crossorigin="anonymous" 怎么配才生效?
绝大多数 CDN 场景用 crossorigin="anonymous" 就够了,但它必须“显式写全”,且服务端要配合。
- HTML 中必须写成:
<script src="https://cdn.example.com/app.js" crossorigin="anonymous"></script>—— 不能只写crossorigin或crossorigin="",语义不清易出错 - 服务端响应头必须包含:
Access-Control-Allow-Origin: https://your-site.com(精确匹配)或Access-Control-Allow-Origin: * - Webpack 项目里,异步 chunk(如
import('./module.js')加载的文件)默认不带crossorigin→ 需设output.crossOriginLoading = 'anonymous' - Vite 项目里,
import()加载的 chunk 默认也不走 CORS → 要在vite.config.ts的build.rollupOptions.output.crossOrigin设为'anonymous'
哪些场景必须加 crossorigin?哪些不用?
crossorigin 不是所有跨域脚本都要加,它只影响错误堆栈是否可见,不影响脚本执行本身。
- 纯展示型跨域脚本(比如只提供全局函数、不抛异常)→ 不加也能运行,但出错就只能看到
"Script error." - 你依赖
window.onerror或addEventListener('error')上报 JS 错误 → 必须加,否则监控平台收不到有效信息 - 脚本内错误被
try/catch拦住了 →window.onerror根本不会触发,加了crossorigin也没用,得在catch里手动上报 - 动态创建
<script></script>标签 → 必须在设置src前赋值script.crossOrigin = 'anonymous',否则请求已发出,属性无效
异步加载和模块化环境下的常见漏点
现代工程中,<script></script> 标签只是冰山一角,真正容易掉坑的是打包工具生成的动态资源。
-
async或defer不影响onerror捕获能力,但不加crossorigin依然只有"Script error." - Webpack 的
SplitChunksPlugin生成的 chunk 文件,即使 HTML 里写了crossorigin,也不自动继承 → 必须靠output.crossOriginLoading - Vite 的
import()chunk 默认无crossorigin,且不支持通过 HTML 注入 → 只能靠 Rollup 配置或插件(如vite-plugin-crossorigin)注入属性 - 第三方 SDK 自行动态插入
<script></script>→ 它们往往不带crossorigin,你需要 patch 或换用支持配置的版本
实际调试时,最省事的验证方式是打开开发者工具的 Network 面板,找到那个 JS 请求,检查响应头里有没有 Access-Control-Allow-Origin,再比对它的值和当前页面协议+域名是否完全一致。差一个斜杠、多一个 www、http/https 不匹配,都会让 crossorigin 形同虚设。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











