如何测试是否从 CDN 成功加载了某个 javascript 库?

问题描述

从 CDN 下载 javascript 文件时,我想提供本地后备。然而,如何测试某个加载是否成功对我来说并不总是很明显。

对于一些流行的东西,这在其他 StackOverflow 问题中有详细记录,例如对于 Bootstrap one,分别测试 if (window.jQuery)if (window.Popper)if ($.fn.modal) 的三个部分。但是,对于其他库,这不太明显:

  • 对于 jQuery Validate,我发现了相互矛盾的信息:this topic 表示可以执行 if (window.validator)this one 表示需要 if(typeof $().validate == 'undefined')。这些之间有什么区别,为什么我需要一个而不是另一个
  • 对于不太流行的图书馆,例如balanceText,我应该如何确定库是否成功加载?

一个通用的答案/方法将是完美的,但如果这不可行,我会很感激这两个库的答案。

解决方法

如果您自己使用加载脚本,您可以使用 script 元素上的 onerror 事件来查看脚本是否加载,而不是检查副作用。示例:

<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/react@17.0.1/umd/react.production.min.js"></script>
<script onload="cdnLoaded()" onerror="cdnError()" async src="https://unpkg.com/nothing-here.js"></script>