当前位置: 首页 > 知识库问答 >
问题:

异步脚本的负载何时触发?

苏鹏鹍
2023-03-14

下面的代码片段取自Google API文档中的一个示例。这段代码中有趣的部分是在两个中的onload事件处理程序

<!DOCTYPE html>
<html>
<head>
  <script async defer src="https://apis.google.com/js/api.js" onload="gapiLoad()"></script>
  <script async defer src="https://accounts.google.com/gsi/client" onload="gisInit()"></script>
</head>
<body>
  <script>

    function gapiLoad() {
       // do something 
    }

    function gisInit() {
       // do something 
    }

    // there are other stuffs...

  </script>
</body>
</html>

共有2个答案

锺离锦
2023-03-14

没有async不能确保脚本将在文档被解析后执行。它会并行加载脚本并尽快执行,因此如果脚本的获取在解析器到达之前完成

<script async defer src="https://apis.google.com/js/api.js" onload="gapiLoad()"></script>
<script async defer src="https://accounts.google.com/gsi/client" onload="gisInit()"></script>
<!-- This one is blocking for at least 3s -->
<script src="https://deelay.me/3000/https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script>
function gapiLoad() {
   console.log("loaded");
}
function gisInit() {
   console.log("init");
}
</script>

孙嘉悦
2023-03-14

Onload事件处理程序支持以下HTML标记:<code>

如果您想确保JS只在加载DOM时运行,可以从body标签中加载一个处理函数。

注意你需要知道当异步使用onload时,当脚本被异步加载时,它们会延迟onload事件。通常,异步加载的脚本会加载其他脚本。

function start() {
  gapiLoad();
  gisInit();
}

function gapiLoad() {
  console.log(1)
  // do something 
}

function gisInit() {
  console.log(2)
  // do something 
}
    
    // there are other stuffs...
<head>
<script async defer src="https://apis.google.com/js/api.js" ></script>
<script async defer src="https://accounts.google.com/gsi/client"></script>
</head>

<body onload="start()">
 类似资料:
  • 问题内容: 我正在使用JQuery的几个插件,自定义窗口小部件和其他一些库。结果,我有几个.js和.css文件。我需要为网站创建一个加载器,因为加载需要一些时间。如果可以在导入所有内容之前显示加载程序,那就太好了: 我找到了一些教程,这些教程使我能够异步导入JavaScript库。例如,我可以做类似的事情: 由于某种原因,当我对所有文件执行相同操作时,页面将无法正常工作。我已经尝试了很长时间,试图

  • 假设我需要编写一个gatling负载测试脚本,它需要调用两个api A1和A2。它首先需要调用A1,A1将返回一个JSON负载,它需要在JSON负载中提取一个字段,并在调用第二个API时使用该字段值。有人能告诉我怎么做吗?此脚本用于负载测试通过HTTP的服务器restful API。

  • 问题内容: 我在中有一个(),如果按下该按钮,我将在for循环中对其列表中的列表执行任务。这样做时,我需要更新。 问题是,当我按下JButton时,该任务是在事件调度线程(EDT)中执行的。因此,我无法更新在主线程或UI线程中触发的事件。 现在,源代码对我不可用,因为我完全更改了源代码,并尝试使用Eclipse SWT 触发Swing时,它变得混乱。 现在我得到了错误,因为Display对象在单独

  • 问题内容: 我有一对夫妇的有关属性的问题及对标签,该标签在HTML5的浏览器我的理解只有工作。 我的一个网站有两个外部JavaScript文件,它们当前位于标记上方;第一个是来自Google的jquery,第二个是本地外部脚本。 关于站点加载速度 在页面底部添加两个脚本是否有任何好处? 将选项添加到两个脚本并将它们放在页面顶部的页面中,会有任何好处吗? 这是否意味着它们会在页面加载时下载? 我认为

  • 本文向大家介绍浅谈原生JS中的延迟脚本和异步脚本,包括了浅谈原生JS中的延迟脚本和异步脚本的使用技巧和注意事项,需要的朋友参考一下 一、延迟脚本 defer HTML4.0中为<script> 标签添加了个defer属性。属性的用途是表民脚本在执行时不会影响页面的构造。 脚本会被延迟到页面加载完毕的时候,执行。也就是当浏览器解析到</html> 标签后才会执行代码。在HTML5规范中,defer属

  • 问题内容: 我已经使用了很长一段时间了(使用python绑定以及大多数情况下),每次我需要执行javascript代码时,我都使用过method。例如,用于滚动页面(python): 或者,要在另一个元素(量角器)内无限滚动: 或者,为了获取所有元素属性的字典)(python): 但是,WebDriver API也具有我个人未使用过的功能。 它涵盖了哪些用例?什么时候应该代替常规? 这个问题是se