如何延迟运行某些 JS 代码,直到下载完所有异步 JS 文件?

2023-12-30

UPDATE:

我有以下代码:

<script type="text/javascript">
function addScript(url) {
    var script = document.createElement('script');
    script.src = url;
    document.getElementsByTagName('head')[0].appendChild(script);
}   
addScript('http://google.com/google-maps.js');
addScript('http://jquery.com/jquery.js');

...

// run code below this point once both google-maps.js & jquery.js has been downloaded and excuted

</script>

在下载并执行所有必需的 JS 之前,如何防止代码执行?在上面的示例中,这些必需的文件是 google-maps.js 和 jquery.js。


您可以使用onload大多数浏览器的脚本元素的事件,并使用回调参数:

Edit:当您以这种方式加载脚本时,您无法真正停止代码的执行(并且大多数情况下发出同步 Ajax 请求不是一个好主意)。

但是你可以链接回调,所以如果你有一些依赖于两者的代码,Two.js and Three.js, 你可以chain加载动作,例如:

loadScript('http://example.com/Two.js', function () {
  // Two.js is already loaded here, get Three.js...
  loadScript('http://example.com/Three.js', function () {
    // Both, Two.js and Three.js loaded...
    // you can place dependent code here...
  });
});

执行:

function loadScript(url, callback) {
  var head = document.getElementsByTagName("head")[0],
      script = document.createElement("script"),
      done = false;

  script.src = url;

  // Attach event handlers for all browsers
  script.onload = script.onreadystatechange = function(){
    if ( !done && (!this.readyState || // IE stuff...
      this.readyState == "loaded" || this.readyState == "complete") ) {
      done = true;
      callback(); // execute callback function

      // Prevent memory leaks in IE
      script.onload = script.onreadystatechange = null;
      head.removeChild( script );
    }
  };
  head.appendChild(script);
}

对于 IE 来说,onreadystatechange http://msdn.microsoft.com/en-us/library/ms536957(VS.85).aspx事件必须被绑定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何延迟运行某些 JS 代码,直到下载完所有异步 JS 文件? 的相关文章

随机推荐

  • jQuery:获取标题和 href 值作为变量

    我有一个带有标题和 href 值的链接列表 我希望能够单独获取这些值 但我总是获取第一个链接的值 这是为什么 在这里看我的小提琴 http jsfiddle net FaNdV 正如您所看到的 单击任何链接时 您始终会从第一个链接获取值 我
  • 带有自定义图像的 UISwitch

    我需要通过更改背景颜色以及旋钮 支架 图像来自定义 UISwitch 如下图所示 是否可以在不拒绝应用程序的情况下自定义 UISwitch 提前致谢 有一个onTintColor您可以在 UISwitch 上设置的属性 如果您还需要更改手柄
  • 根据布尔列升序或降序

    This is the table structure in PostgreSQL 10 尽管 日期 是一个int 它代表 yyyy mm dd 日期 我正在尝试写一个SELECT按日期排序 当 BC true 时desc 因此日期将按正确
  • Flutter:使用不包含 Bloc 类型的上下文调用 blocprovider.of()

    我是 flutter 新手 我想使用 BLoc 实现一个简单的登录屏幕 没有构建错误 但在运行时收到以下错误 使用不包含 LoginBloc 类型的 Bloc 的上下文调用 blocprovider of My Code class Log
  • Julia 中的字典帮助 - 从文本文件创建字典

    我正在尝试根据 Julia 中文本文件的内容创建一个库 以用于生物信息学问题 该文件的格式如下 UUU F CUU L AUU I GUU V UUC F CUC L AUC I GUC V 我想制作一本字典 其中键是 3 个字母部分 密码
  • 在表单之间传递数据

    我的项目中有 3 个 winform Form3 上有一个复选框 我想要做的是单击此复选框 然后在退出表单时对 Form1 中的复选框进行相同的检查 无论是否选中 我现有的代码如下 但它不起作用 我是否在某个地方错过了一个技巧 谢谢 For
  • Nat 列表在 0 到 2 之间的类?

    使用 Peter Neyens 的帮助answer https stackoverflow com a 39159167 409976 我尝试创建一个X类仅包含Nat小于或等于2 import shapeless import shapel
  • MongoDB 与 Mongoose 限制子文档

    对于 MongoDB 和 Mongoose 我是个菜鸟 所以请原谅我 我将 Node 与 Express 以及 Mongoose 一起使用 我有一个包含大量子文档的文档 以至于我的服务器在尝试加载所有子文档时内存不足 所以我想选择子文档的最
  • 无法解决排序规则冲突?

    我遇到了这个错误 但我不知道如何修复它 无法解决 Arabic CI AS 和 Arabic CI AS 之间的排序规则冲突 等于操作中的 SQL Latin1 General CP1 CI AS 注意 我已经从数据库选项更改了排序规则 g
  • mvc3 验证检查属性值是否不同

    在 MVC3 中 您可以向模型添加验证以检查属性是否匹配 如下所示 public string NewPassword get set Compare NewPassword ErrorMessage The new password an
  • Pytest 从不同的测试用例文件中排序

    您好 我使用 pytest 并在文件夹中有以下 2 个 py 文件 test abc py如下 class MyTest unittest TestCase classmethod def setup class cls cls a 10
  • Rails + Mongoid - 不要在 JSON 中返回 nil 值

    我在 Mongoid 中有很多可选字段 例如 field key type String field element type String field rect type Array 如果我返回此模型的 json 其中仅填充其中一个 我会
  • 在 Archlinux 上无法找到或加载 Qt 平台插件“xcb”(Write!AppImage)

    正在尝试安装写入 Arch Linux 上安装了 qt5 freetype2 2 9 1 和 fontconfig 2 2 13 1 12 g5f5ec56 1 的 AppImage levi astize Write write This
  • 如何使用 GCD 在后台定期运行代码块?

    如何使用 GCD 在后台定期运行代码块 我正在尝试编写一个具有多个子系统的游戏引擎 例如渲染 物理 游戏逻辑等 有些任务应该是事件驱动的 但有些任务 如物理系统 应该在后台以恒定的时间 例如 1 100 秒后 定期调用 我创建了一个代码块
  • 实现无限循环时,使用 while(1) 与 for(;;) 与 goto (在 C 中)有区别吗?

    实现无限循环时 使用有什么区别while 1 vs for vs goto 谢谢 陈兹 即使您关闭优化器 它们也是等效的 Example include
  • 如何使用 Gmail API 检索电子邮件正文内容?

    我正在研究 Gmail API 假设我有兴趣查看哪封邮件包含字符串 foobar2000 到目前为止 这是我的代码 主程序 java package manhattan email bot import com google api cli
  • 自定义 Linq 订购

    我有一千多个文件夹 每个文件夹都包含一个或多个具有以下名称的文件 无序 Alison ext Heather ext Molly ext Paula ext Sam ext Ordered Molly ext Sam ext Heather
  • This.setstate 在回调中卸载

    这里真的很困惑 我更新到了 React Router 4 这需要一些更改 现在当我的注册表单在服务器端出现错误时 它会返回控制台错误 setState 只能更新已安装或正在安装的组件 这 通常意味着您在未安装的组件上调用了 setState
  • ckeditor angularjs指令:如何上传多个图像?

    我正在使用 ckeditor 指令 就像 在 Angular JS 中使用 CKEditor 内容更新 textarea 值 https stackoverflow com questions 18917262 updating texta
  • 如何延迟运行某些 JS 代码,直到下载完所有异步 JS 文件?

    UPDATE 我有以下代码