document.write()
不使用回退本地文件?注意:我并不是想仅针对jQuery完成此操作。我想对几个文件执行此操作。
<!--<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?的SO问题。然后,我尝试实现可接受的解决方案,并像这样将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.
答案 0 :(得分:3)
您应该收听 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>
答案 1 :(得分:-2)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval
评估可能不是正确的选择(几乎从来没有)。
以下选项之一可能会更适合您: How to load javascript code to an html file at runtime?