未调用 DOMContentLoaded 或加载事件处理程序的异步加载脚本?

2024-03-12

我有一个脚本DOMContentLoaded事件处理程序—

document.addEventListener('DOMContentLoaded', function() {
    console.log('Hi');
});

我正在异步加载 -

<script async src=script.js></script>

然而,事件处理程序从未被调用过。如果我同步加载它——

<script src=script.js></script>

效果很好。

(即使我改变了DOMContentLoaded事件到load事件,它从未被调用。)

是什么赋予了?无论浏览器如何加载脚本,都应该注册事件处理程序,不是吗?

Edit:它不适用于 Chrome 18.0.1025.11 beta,但是,DOMContentLoaded, it does在 Firefox 11 beta 上(但带有load事实并非如此)。去搞清楚。

哦,JavaScript 和 DOM 的伟大领主,请告诉我我的方法中的错误!


通过异步加载脚本,您可以告诉浏览器它可以独立于页面的其他部分加载该脚本。这意味着页面可能会完成加载并可能会触发DOMContentLoaded在加载脚本之前以及在注册事件之前。如果发生这种情况,您将错过该活动(当您注册时已经发生了)。

在所有现代浏览器中,您可以测试文档以查看它是否已加载(MDN doc https://developer.mozilla.org/en/DOM/document.readyState),您可以检查:

if (document.readyState !== "loading")

查看文档是否已加载。如果是的话,就做你的事吧。如果不是,请安装事件侦听器。

事实上,作为参考源和实现思想,jQuery 做了同样的事情,它的.ready()方法,它看起来得到了广泛的支持。 jQuery 有这段代码,当.ready()调用它首先检查文档是否已经加载。如果是这样,它会立即调用ready函数,而不是绑定事件监听器:

// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
if ( document.readyState === "complete" ) {
    // Handle it asynchronously to allow scripts the opportunity to delay ready
    return setTimeout( jQuery.ready, 1 );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未调用 DOMContentLoaded 或加载事件处理程序的异步加载脚本? 的相关文章

随机推荐

  • 当用户跳过其中一个edittext并在下一个edittext上输入数据时如何提示错误?

    在此我有八个edittext 如果用户在edittext1处输入输入 则会跳过edittext 2并在edittext 3中输入数据 我需要向用户提示错误 并且try块内的else部分不会被执行 在哪里我错了我该如何纠正这个逻辑错误 pac
  • 从 Uri 类型 android 创建文件

    我正在尝试从图库中选择图像 然后将此图像转换为文件并通过 HttpPost 发送 但我总是FileNotFoundException 这是我的代码 选择照片 public void onActivityResult int requestC
  • 如何在 Flutter CustomPainter 中使用贝塞尔曲线绘制形状

    我正在尝试使用 flutter customPainter 库绘制下面的图片 我怎样才能画出这个形状 我的代码和结果 import package flutter material dart class CurvePainter exten
  • Xamarin SOAP Web 服务

    我在 Xamarin 中创建了一个便携式库项目 我想添加 Web 服务 但框架区域已关闭 这是什么原因呢 有没有人遇到过同样的问题 过期网址 111 111 11 11 8013 Services Kurum IdentityMngmnt
  • scala - 激发 Dataframe 的结果集

    我正在查询 mysql 表 val url jdbc mysql XXX XX XXX XX XX compute 1 amazonaws com 3306 pg partner val driver com mysql jdbc Driv
  • AWS DynamoDB 查询不过滤 BOOL 值

    我有一个使用 GUI 创建的用户表 并给出了电子邮件分区键 它是一个字符串 然后我使用 aws lambda 来做一个 putItem 它有 email string email protected cdn cgi l email prot
  • 嵌入模板上的任何指令均未使用属性绑定 ngif

    我正在 Angular Angular2 RC4 中创建一个简单的应用程序 但我发现很难在 Nodejs 中使用实时服务器运行该应用程序 我想帮助您了解如何解决 Chrome 控制台中出现的错误 Chrome 控制台出错 browser a
  • 检查一个数据帧是否是另一个数据帧的重新排序[重复]

    这个问题在这里已经有答案了 我有两个在两个不同场合生成的数据帧 但我怀疑它们是相等的 两者具有相同的行数和列数 从视觉上看它们似乎是相同的 除了行的排序方式不同 两者都没有可以重新排序的 ID 列 我能做的最好的事情就是通过process
  • 使用 RX Java 获取过滤器索引或第一个的优雅方法

    我正在练习 RX Java 想要获取与过滤器匹配的项目在数组中的位置 我看不到任何明显的方法来做到这一点 我正在考虑压缩范围和可迭代可观察之类的东西 但它很快就变得比 for 循环更加冗长和复杂 过去有mapWithIndex and zi
  • 将 Firebase DB 与本地数据库结合使用

    在我的应用程序中我有SQLite db 我想在用户的设备之间引入同步 Firebase DB看起来是一个可以接受的解决方案 但是Firebase DB首先是云数据库 因此 如果用户拒绝身份验证对话框并让他使用应用程序 但没有云同步 我无法将
  • iOS 通过溢出滚动禁用页面滚动:触摸

    假设我们希望通过 添加到主屏幕 使网络应用程序感觉像本机应用程序 第一步是禁用默认滚动 容易 对吧 window or document window addEventListener touchmove function event no
  • 如何选择具有多个类的跨度并将其放置在锚点内?

    我所处的情况是 我需要根据应用于它的类将单击事件绑定到跨度 放置在具有多个类的锚点内 For eg 更新 添加了下面的 html 例如 div class c0 c a class c1 c2 span class c3 c4 span A
  • Supervisor 节点 .js“程序节点应用程序已退出,代码为 0”错误

    当我安装快速脚手架应用程序时 express 然后运行npm安装 npm install 然后运行主管 supervisor app I get Starting child process with node app Program no
  • 从数据库模式创建 Web 表单

    我想知道是否有任何应用程序 最好是免费软件 可以进行数据库配置 并且尽可能轻松地创建用于轻松插入数据的 Web 表单 我发现很难准确表达我所追求的是什么 也许我可以谈谈我需要什么 我有一个配置数据库 至少通常包含有关我们系统中服务器的 真相
  • 如何在 jQuery 中解析 JSON 数组?

    EDIT我检查了 jQuery 文档 并使用 ajax 和指定的 json 数据类型返回一个评估的 javascript 对象 因此 eval 不是这里的答案 无论如何 我知道这一点 因为我能够解析单个 JSON 对象 但不能解析数组 问题
  • Capybara 问题:@request 必须是 ActionDispatch::Request

    我在让 Capybara 与 Rails 一起使用时遇到问题 只是测试那个所谓有趣的测试东西 好的 在所附的代码中有几个等效的测试 第一个是用Rails 自带的shoulda context Test Unit 制作的 第二个测试也是使用水
  • bitbucket - 无法确定主机“bitbucket.org”的真实性

    我在尝试推送到我的 bitbucket 存储库时遇到了这个问题 不确定为什么指纹不匹配 It asks me if I want to continue but I can t type anything in the dialog aft
  • 未为类型“DBNull”和类型“Integer”定义运算符“=”

    过去几个小时我一直在挣扎 但仍然无法解决这个问题 我遇到的问题是 当有人被承认数据库更新给他们 BedID 时 当我尝试释放他们时 我似乎无法将 BedID 在数据库中 设置为 Nothing 这是一个问题 因为我需要能够接纳和解雇尽可能多
  • 将 csv 数据集导入到 R 但值变成因子

    我对 R 非常陌生 在访问我导入的数据集时遇到问题 我正在使用 RStudio 并在导入 csv 文件时使用导入数据集功能 并将该行从控制台窗口粘贴到源窗口 代码如下 setwd c kalle R stuckey lt read csv
  • 未调用 DOMContentLoaded 或加载事件处理程序的异步加载脚本?

    我有一个脚本DOMContentLoaded事件处理程序 document addEventListener DOMContentLoaded function console log Hi 我正在异步加载 然而 事件处理程序从未被调用过