You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CDN加载失败时onerror的this.src切换本地JS无效,仅document.write可行

为什么修改script的src无法 fallback 到本地JS,而document.write可以?

直接修改src失效的原因

浏览器对<script>标签的加载逻辑是:当首次指定的src加载失败后,该script元素会被标记为加载失败状态,此时即使你修改它的src属性,浏览器也不会重新发起新的HTTP请求去加载新的资源。这是浏览器的内置机制,避免重复请求已判定失败的资源(哪怕目标路径已变更)。

document.write生效的原因

使用document.write时,你并不是修改原有script元素,而是在当前文档流中插入了一个全新的<script>标签。这个新的script元素未被标记为失败状态,浏览器会正常解析它的src属性并发起请求加载本地JS文件,因此能成功完成 fallback。

更推荐的替代方案

现在不推荐使用document.write(尤其是文档加载完成后使用可能会覆盖整个文档),更稳妥的方式是动态创建script元素:

<script src="cdn.js" onerror="this.onerror=null; loadLocalScript()"></script>
<script>
function loadLocalScript() {
  const script = document.createElement('script');
  script.src = 'local.js';
  document.head.appendChild(script);
}
</script>

这种方式通过创建新的script元素并插入DOM,既规避了原script元素的失败状态限制,也不会出现document.write的潜在问题。

内容的提问来源于stack exchange,提问作者Unknown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:15:59