.onLoad 在渲染完成之前调用吗?

2024-05-26

我想在页面加载后调用一些 JS,这可能会涉及延迟,因此我希望首先加载页面,以便显示内容...但似乎调用了 onLoad 处理程序中的代码before渲染完成。是否有更好的事件可以使用,该事件在页面“完成”时触发?

澄清一下,我想在页面呈现在屏幕上之后运行一些 JS,所以实际上是一个“后一切事件”。


沿着时间顺序有几个有趣的点。这个通用序列是一个很好的概述,尽管不同的浏览器和版本实现细节略有不同。 (这假设您使用原始 Javascript 并且需要最大限度地减少跨浏览器问题;JQuery 具有对跨浏览器问题的全面内部处理,但略有不同):

T0] 页面开始——浏览器已开始在页面上工作,但环境仍在变化。你的 JS 操作可能会发生在错误的上下文中,并且当正确的上下文稳定时就会被刷新。您可能根本不想尝试执行任何 JS。

T1]“onLoad”事件--[但是您获得事件:addEventListener("Load"..., window.onload=..., 等等] 页面的所有部分都已被识别并且下载的来自服务器并位于本地系统的内存中。为了识别所有部分,已经进行了一些解析。 (请注意,“加载”与“下载”同源,而不是“解析”或“渲染”。)

现在你已经有了合适的环境,可以开始执行 JS 代码而不必担心丢失任何东西。HOWEVER,尝试读取或操作 HTML [getElementById(...,appendChild(...,etc)] 的操作可能会以奇怪的方式失败,或者可能看起来有效但随后消失,或者可能会执行与您预期不同的操作。

T2] DOM-almost-ready-- 这个 hack 非常简单并且完全跨浏览器。只需将 JS 放在 HTML 的最后,就在

T3] DOM-ready-- [但是你获取事件:addEventListener("DOMContentLoaded"..., window.ondomcontentloaded=..., 等等] 此时 HTML 已完全解析,JS 100% 可用,包括所有读取或操作 HTML 的函数 [getElementById(...、appendChild(..., 等等])。

T4]渲染完成--浏览器完成在屏幕上显示内容。有NOT任何此类事件或任何合理的跨浏览器版本无关的方法来检测这种情况。这样也好,因为你可能并不真正想要这样。如果浏览器已经在屏幕上显示该页面并且then当你操作 DOM 时,你会得到一个“闪光”,之前和之后在屏幕上至少短暂地可见。您可能真正想要的是可以执行任意 JS 代码的点;那就是previous(T3] DOM 就绪) 时间点。

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

.onLoad 在渲染完成之前调用吗? 的相关文章

随机推荐

  • Angularjs - ng-click 函数与指令

    我无法决定在以下情况下使用哪种方法 我试图在点击按钮时发出警报 我可以使用两种方法来做到这一点 哪个是最佳实践 请告诉我为什么 Method 1 div div
  • 通过蓝牙将字符串从作为客户端的 PC 发送到作为服务器的移动设备

    我需要通过蓝牙将字符串从 PC 传输到 Android 移动设备的帮助 Android 移动设备应充当服务器并在设备屏幕上显示字符串消息 作为客户端的 PC 应该将字符串发送到移动设备 我希望服务器对提取的字符串 通过蓝牙传输 做出反应 这
  • 如何使用 VB6 调用 Windows shell 命令?

    究竟如何使用 VB6 才能像从命令行一样调用任何 Windows shell 命令 例如 一些微不足道的事情 echo foo 操作方法如下 Shell cmd echo foo vbNormalFocus
  • Windows 7 下 VB 6 中的“用户定义类型未定义”错误

    我使用的是 Windows 7 我的项目是 VB 6 0 我在执行程序时遇到错误 它显示错误 未定义用户定义类型 这是我的代码 Private Sub Toolbar1 ButtonClick ByVal Button As MSComct
  • 在 GNU C++ 编译器中运行具有多个源文件的程序

    我在 Windows 7 操作系统上使用 DEV GNU c 编译器 我需要知道如何编译具有多个源文件的程序 这是例子 FILE1 void f1 printf this is another file under same program
  • 在 Windows 7 上安装 Python Fabric 时出现问题

    我正在尝试使用以下指南在 Windows 7 上安装 Python Fabric在 Windows 上安装 Python 和 Fabric http www jonnyreeves co uk 2011 08 getting python
  • 自动完成功能在特定层次结构的 XML 文件中不起作用

    特别是 XML 节点层次结构 例如 DrawerLayout gt RelativeLayout gt ImageButton 自动完成功能无法按预期工作 建议列表包含无效项目 例如 android src里面没有显示ImageButton
  • 为什么 event.stopPropagation() 不会阻止

    SO 上也提出了与此类似的问题 但他们要么只关心解决其具体实现 要么没有明确提出这个问题 此外 所有答案都没有真正解决这个问题 给出以下示例 document querySelector span addEventListener clic
  • 最低共同祖先算法

    所以我一直在研究实现最低共同祖先算法 我研究了许多不同的算法 主要是 Trajan 解决方案的变体或 RMQ 的变体 我正在使用非二叉树 我的树经常会在查询之间发生变化 因此预处理不一定值得 树的节点数不应超过 50 75 个 我想知道的是
  • MAMP Pro mysql 无法启动

    我遇到问题无法找到解决此问题的方法 我收到这个错误 2017 01 11 23 58 25 7fffbac563c0 InnoDB Operating system error number 2 in a file operation In
  • 如何通过双击图标来执行JAVA程序?

    我写了一个java程序 现在我想在没有 IDE Eclipse 等的情况下打开我的控制台 java 应用程序 只需双击桌面上的可执行版本即可 我已将 java 项目导出为 Runnable JAR 文件 但无法打开 当我尝试使用cmd打开应
  • 适用于真正复杂查询的 ORM 解决方案

    在这样复杂的情况下 人们可以 应该使用任何 ORM 解决方案吗 这可以用以下方法完成吗Propel or Doctrine 目前我正在使用 Propel 所以如果有 Propel 解决方案 我会很高兴 如果我使用 propel 进行直接查询
  • REST API 响应中的校验和

    发送带有响应内容的校验和是个好主意吗 如果是这样 计算校验和的最常见方法是什么 Example HTTP 1 1 200 OK Date Thu 30 Jun 2011 21 32 20 GMT Server Apache Connecti
  • 苹果的属性列表(plist)在C++中的实现

    我的任务是在 C 应用程序中读取 Apple 的属性列表文件 主要关注 OS X 中指定的 xml 类型 plist 文件 它模仿 xml 类型实现 Apple 对其属性列表的实现描述如下 http developer apple com
  • 计算热图颜色

    我正在制作一个由 HTML 表格组成的热图 该表包含n细胞并有一个lowest值和一个highest值 最高值始终高于最低值 每个细胞都有一个cell价值 所有这些值都是整数 具有最低值的单元格应为浅蓝色 缩放到具有最高值的单元格为深红色
  • Rails (PostgreSQL) 中文本列的默认大小

    如果我在迁移中有这个 t text body 我可以容纳多少文字 body 如果相关的话我正在使用 PostgreSQL 直接来自PostgreSQL 文档 http www postgresql org docs 8 4 static d
  • 自定义错误处理程序抛出错误:无法读取未定义的属性“get”(注入器)

    我正在 Angular 4 中构建自定义错误处理程序 以使用错误拦截器处理不同类型的应用程序错误 创建一个基类 应用程序错误 ts 和其他类 例如处理 403 错误创建类拒绝访问 ts 扩展了这个基类 在基类中注入了一个服务toastrSe
  • 用逗号分割字符串到新行

    我有一个像这样的字符串 This is great day tomorrow is a better day the day after is a better day the day after the day after that is
  • 将误差线添加到多条线上以在 R 中的绘图上显示标准差

    我有一个包含许多不同线条的图 我想为每条线上的每个点添加误差线 df lt matrix runif 25 5 5 plot 1 5 seq 0 1 1 4 type n mapply lines as data frame df col
  • .onLoad 在渲染完成之前调用吗?

    我想在页面加载后调用一些 JS 这可能会涉及延迟 因此我希望首先加载页面 以便显示内容 但似乎调用了 onLoad 处理程序中的代码before渲染完成 是否有更好的事件可以使用 该事件在页面 完成 时触发 澄清一下 我想在页面呈现在屏幕上