首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果CDN不使用document.write()而失败,如何加载本地静态文件?

如果CDN不使用document.write()而失败,如何加载本地静态文件?
EN

Stack Overflow用户
提问于 2019-07-03 00:14:49
回答 1查看 2.1K关注 0票数 2

我想要达到的目标

我将在局域网上托管一个web应用程序,最多可容纳50人。来自局域网之外的任何人都不会访问web服务器。现在,我有一个使用CDN的web应用程序来交付Bootstrap和jQuery以及其他一些东西。我希望web应用程序回到CDN文件的本地静态副本,以防出问题。

我的问题

  1. 如果我的web服务器只供局域网上的用户使用,哪种方法更好: CDN还是本地文件?
  2. 如何在没有使用的情况下回退本地文件document.write()

注意:我不想只为jQuery完成这一任务。我想对几个文件这样做。

相关的SO问题

我看了很多其他的问题,回答了我想要做的事情,下面列出了最受欢迎的问题。

  1. Best way to use Google's hosted jQuery, but fall back to my hosted library on Google fail
  2. How to load local script files as fallback in cases where CDN are blocked/unavailable?
  3. Is Google’s CDN for jQuery available in China?

我所尝试的

我从问题(1)实现了以下代码

代码语言:javascript
运行
复制
<!--<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>-->
 <script>
     console.log(window.jQuery) // ==> undefined
     window.jQuery || document.write('<script type="text/javascript" src="{% static "js/jquery-3.4.1.min.js" %}"><\/script>');
     console.log(window.jQuery) // ==> undefined
 </script>

但这个解决方案:

  1. 加载文档失败
  2. 使Google声明以下内容
代码语言:javascript
运行
复制
[Violation] Avoid using document.write(). https://developers.google.com/web/updates/2016/08/removing-document-write
[Violation] Parser was blocked due to document.write(<script>)

这就引出了这样一个题为“A Parser-blocking, cross-origin script is invoked via document.write - how to circumvent it?”的问题。然后,我尝试实现接受的解决方案,并将async追加到代码中,如下所示

代码语言:javascript
运行
复制
<script>
   console.log(window.jQuery) // ==> undefined
   window.jQuery || document.write('<script type="text/javascript" src="{% static "js/jquery-3.4.1.min.js" %}" async><\/script>');
   console.log(window.jQuery) // ==> undefined
</script>

但是它仍然无法加载文档,我再次得到以下错误:

代码语言:javascript
运行
复制
[Violation] Avoid using document.write(). https://developers.google.com/web/updates/2016/08/removing-document-write.

结论:

那么,实现这一目标的正确方法是什么呢?如何在不使用document.write()的情况下做到这一点?以前问题的答案似乎已经过时了。

EN

回答 1

Stack Overflow用户

发布于 2019-07-03 00:52:01

您应该侦听onerror事件,如果它发生了,则加载本地事件。

下面是一个示例(您应该修改代码以适应您的情况):

代码语言:javascript
运行
复制
<script>
    function onJqueryLoadError()
    {
        document.write('<scr' + 'ipt src="static/jquery-3.4.1.min.js"></scr' + 'ipt>');
    }
</script>
<script src="https://www.cdn/jquery-3.4.1.min.js" onerror="onJqueryLoadError()"></script>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56861425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档