是什么导致源脚本无法加载然后再次加载?

What makes a source script not loading and then loading again?

当使用具有 src 属性的 <script> 标签时,应该期望它下载:

<script src="https://unpkg.com/neovis.js@2.0.0-alpha.9/dist/neovis.js"></script>

不过最近下载失败,我也没找到原因。可能可靠的解决方法是,当发生这种情况时,我将其更改为:

<script>
function cdnLoaded() {
    console.log('loaded');
}
function cdnError() {
    console.log('not loaded');
    // do error handling here
}
</script>    
<script onload="cdnLoaded()" onerror="cdnError()" async src="https://unpkg.com/neovis.js@2.0.0-alpha.9/dist/neovis.js"></script>

此时,控制台显示已加载但实际上并未加载。但之后当我将其恢复为:

<script src="https://unpkg.com/neovis.js@2.0.0-alpha.9/dist/neovis.js"></script>

然后它再次工作。这在两个浏览器(Edge 和 Firefox)中出现过两次,我还没有机会再次测试。

造成这种奇怪行为的原因是什么?这可能是一种缓存吗?

按文件名浏览器缓存脚本。 可能 adding/removing onload 和 onerror 属性强制浏览器重新下载脚本。

要强制重新加载文件,您可以应用版本控制

<script src="util.js?v=1"></script>

现代框架用于自动加入、缩小和重命名脚本文件。 您可以使用 webpack

等工具来完成