【问题标题】:jQuery CDN timeout fallbackjQuery CDN 超时回退
【发布时间】:2023-04-11 14:46:01
【问题描述】:

我已经在多个地方阅读了如果由 google 或 microsoft 或其他托管的链接失败,如何回退到 jQuery 库的本地副本。

<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
if (typeof jQuery == 'undefined')
{
document.write(unescape("%3Cscript src='/Scripts/jquery-1.3.2.min.js' type='text/javascript'%3E%3C/script%3E"));
}
</script>

我的应用程序在 Intranet 环境中运行,但偶尔外部 jQuery 链接不会失败,但需要很长时间才能加载(由于外部 Internet 连接问题)。

我想知道是否有一种方法不仅可以使用这种回退,而且可以为 CDN 链接设置超时,这样如果链接需要一定的时间,它就会失败并调用回退。

类似:

if(timetoloadjquery > n) {
    Use fallback local jQuery library.
}

也许是某种循环来检查 jQuery 是否已定义,如果经过如此多的迭代后仍未定义...做其他事情?

感谢您的帮助。

【问题讨论】:

  • (我从来不理解 CDN 的事情。额外的 DNS 查找,额外的下载,仍然需要后备。)
  • A &lt;script src&gt; 正在阻塞,因此下一个 &lt;script&gt;知道是否加载了前一个脚本。不需要超级超级慢的超时。
  • onerror=onload= 中的 &lt;script src&gt; 怎么样?
  • 下载后按顺序执行。下一个脚本块只有在前一个脚本块下载并执行(或失败)后才会执行。

标签: javascript jquery fallback


【解决方案1】:

这可能会对您有所帮助。 5 秒后,Javascript 会检查 jQuery 是否可用,如果不可用,则从本地服务器加载库。

1.带计时器

<script>
setTimeout(function() {
  if(window.jQuery) return;
  var n = document.getElementsByTagName("script")[0];
  n.parentNode.insertBefore(document.createElement("script"), n).src = "assets/jQuery/jquery-1.7.2.min.js";
}, 5000);
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>

2.这个没有定时器,如果CDN版本失败,它会加载一个本地版本。

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.js"></script>
<script type="text/javascript">window.jQuery || document.write("<script type='text/javascript' src='js/jquery-1.8.3.min.js'>\x3C/script>")</script>

【讨论】:

  • 谢谢,我试试看。
  • @Barbs 第一个版本(带有计时器)的问题是缓慢加载的库将继续加载。它不会中止它。
  • 谢谢我可能不得不放弃并在本地托管图书馆。
  • 好的,假设 jQuery 被加载了两次。它会以某种方式影响演示或性能吗?最大的问题是页面是否会在第二次加载 jQuery 之前显示出来。