我想要达到的目标
我将在局域网上托管一个web应用程序,最多可容纳50人。来自局域网之外的任何人都不会访问web服务器。现在,我有一个使用CDN的web应用程序来交付Bootstrap和jQuery以及其他一些东西。我希望web应用程序回到CDN文件的本地静态副本,以防出问题。
我的问题
document.write()
注意:我不想只为jQuery完成这一任务。我想对几个文件这样做。
相关的SO问题
我看了很多其他的问题,回答了我想要做的事情,下面列出了最受欢迎的问题。
我所尝试的
我从问题(1)实现了以下代码
<!--<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>
但这个解决方案:
[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
追加到代码中,如下所示
<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>
但是它仍然无法加载文档,我再次得到以下错误:
[Violation] Avoid using document.write(). https://developers.google.com/web/updates/2016/08/removing-document-write.
结论:
那么,实现这一目标的正确方法是什么呢?如何在不使用document.write()的情况下做到这一点?以前问题的答案似乎已经过时了。
发布于 2019-07-03 00:52:01
您应该侦听onerror事件,如果它发生了,则加载本地事件。
下面是一个示例(您应该修改代码以适应您的情况):
<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>
https://stackoverflow.com/questions/56861425
复制相似问题