VF页面生产环境加载出现脚本MIME类型执行错误沙箱无法复现问询
报错信息:
Refused to execute script from '{DomainURL}' because its MIME type ('text/plain') is not executable, and strict MIME type checking is enabled
问题成因
这个报错的核心触发逻辑是浏览器开启了严格MIME类型检查(对应响应头X-Content-Type-Options: nosniff,也就是你提到的Content Sniffing Protection功能)时,会完全遵循服务端返回的Content-Type判定资源类型,如果脚本资源的Content-Type不是可执行的脚本类型,就会直接拦截执行。生产环境触发、沙箱开启同款配置仍无法复现的常见原因如下:
- 生产和沙箱环境的目标脚本资源返回的Content-Type不一致:生产环境下你要加载的脚本实际返回的
Content-Type是text/plain,而沙箱环境下同一个脚本返回的是正确的application/javascript,所以沙箱即使开了严格MIME检查也不会报错。 - 生产环境脚本请求被重定向到了错误资源:生产环境的权限配置、域名配置和沙箱不同,脚本请求触发了重定向,实际返回的是权限提示页、登录页这类内容为
text/plain或text/html的资源,被浏览器当成脚本解析触发报错。 - 生产环境存在错误的静态资源缓存:之前上线过程中脚本资源的Content-Type配置错误,被CDN或浏览器缓存了,即使后续修复了配置,缓存未过期的情况下仍会返回错误的头信息。
- 跨域配置差异:生产环境的CORS规则配置错误,跨域脚本请求被拦截后返回了类型为
text/plain的错误响应,沙箱CORS规则正常,能正常拿到脚本资源。
解决方案
你可以按照以下顺序排查修复:
- 首先定位错误资源的实际响应:打开生产环境浏览器控制台的「网络」面板,筛选报错的{DomainURL}对应的请求,查看响应头的
Content-Type、X-Content-Type-Options字段,同时查看响应体内容是不是你预期的脚本代码,排除重定向、权限拦截的情况。 - 修复脚本Content-Type配置:
- 如果是引用的Salesforce静态资源脚本,重新上传对应静态资源,上传时手动指定MIME类型为
application/javascript,不要依赖系统自动识别。 - 如果是引用的外部域名脚本,联系资源维护方调整响应头的Content-Type为合法的脚本类型。
- 如果是引用的Salesforce静态资源脚本,重新上传对应静态资源,上传时手动指定MIME类型为
- 刷新生产环境缓存:如果确认是缓存导致的错误,重新部署关联的VF页面和静态资源,触发CDN和浏览器缓存刷新。
- 临时排查方案(不建议长期使用):可以暂时关闭生产环境的Content Sniffing Protection,也就是移除响应头
X-Content-Type-Options: nosniff,确认报错消失后再定位根因调整配置。
内容的提问来源于stack exchange,提问作者Basu
相关产品推荐
相关产品推荐

