javascript - 如何等待 document.write 完成

标签 javascript jquery cdn fallback

我正在尝试编写一些脚本回退代码,以便如果 jQuery 和 jQuery Validator 无法从 CDN 获得,我会加载本地版本。请注意,以下脚本位于单独的文件中以支持内容安全策略 (CSP)。

(window.jQuery || document.write('<script src="/js/jquery.js"><\/script>'));
($.validator || document.write('<script src="/js/jquery-validate.js"><\/script>'));

如果 jQuery 不可用,则会在文档末尾写入一个新的脚本标记,但下一行会出错,指出 $ 未定义。如何等待文档写入完成加载文档再执行下一行?

最佳答案

您应该使用 onload <script> 事件.而不是 ducoment.write ,通过 DOM 操作向文档添加脚本标签:

var s = document.createElement('script');
s.onload = function() {
  // jQuery is now loaded and can be used
}
s.src = '/js/jquery.js';
document.getElementsByTagName('head')[0].appendChild(s);

更新:

您的问题“如何等待 document.write”的答案是您不必这样做,因为 document.write是同步的。 document.write 之后的下一行只有在 write 方法完成写入后才会执行。然而,如果你写一个 <script>使用 src 标记到文档中属性,资源的加载(src 指向的位置)将是异步的,并且将在与下一条语句并行写入完成后开始。因为不可能提前知道加载资源需要多长时间,所以确保外部脚本中的所有内容可用的唯一可行方法是 onload事件。

关于javascript - 如何等待 document.write 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31230400/

相关文章:

javascript - window.document 的类型错误 : Object is possibly 'null' . TS2531

Javascript字符串到多维数字数组

javascript - 使用 jQuery 折叠层次结构中的嵌套列表

javascript - 如何在 JavaScript 中使用 'MMMM Do YYYY, h:mm:ss a' 对日期进行排序

JQuery.Validate CDN 后备

css - 避免使用WP SuperCache和CSS交付CDN字体

javascript - 如何使用 jQuery 从计算机上传图像文件并设置为 div 背景图像?

javascript - Owl Carousel 2 和 Featherlight.js – mouseDrag 导致打开灯箱

javascript - 只有 x 轴的 Highcharts 折线图

c# - 在 HTTPS 安全页面上引用 jQuery CDN?