只存在于理想中的客户端JavaScript时间线

1.Web浏览器根据URL地址下载文档内容,并创建Document对象,解析WEB页面,HTML元素,包含的文本内容,将这些节点添加到DOM树中。在这个阶段,document.readystate属性的值是 loading。

2.当解析器遇到没有async和defer属性的<script>元素时,它把这个元素添加到DOM树中,并且开始执行其中的JavaScript脚本,这些脚本会被同步执行,并且在下载(通过src属性引用的外部js)和执行的过程中,解析器会暂停。所以在这些脚本中可以使用document.write()方法把内容插入到输入流中,解析器在恢复解析的时候会把这些内容当成文档的一部分。可以看到这里的脚本可以看到它自己的<script>元素,以及它们之前的文档内容

3.当解析器遇到设置了async属性的<script>元素时,它开始下载脚本文本,但解析器会继续解析文档。在这些脚本中就不能再使用document.write()方法了。这些脚本同样可以访问到自己的<script>元素和之前的所有文档元素。由于这些脚本在下载完成后立刻执行,所以可能不能访问它之后的其他文档内容。

4.当文档完成解析后,document.readyState属性变成 interactive

5.当解析器遇到设置了defer属性的<script>元素时,它同样会下载脚本文本,并继续解析文档。不过这里的脚本会在文档完成解析后按照先后顺序执行,所以可以访问完整的文档树,当然document.write()方法还是无法使用的

6.浏览器在Document对象上触发DOMContentLoaded事件,这也标志着JavaScript的执行从同步执行阶段转换到了异步事件驱动阶段,不过在这个阶段async属性的脚本可能还没有执行完成。

7.到这里,文档已经解析完成,不过浏览器可能还在等待其他内容的载入,比如图片,flash等外部资源。当所有的这些外部资源完成载入,async属性的脚本执行完成,document.readyState属性变为 complete.并且触发window对象上的load事件。

8.从此刻起,会调用异步事件,已异步的方式响应用户输入事件,网络事件,计时器事件等

当然上面的这条时间线是存在于我们脑海中的一个奢望,各个浏览器在实现上都有或多或少的差异,有的可能只支持其中一部分,这里就需要通过各种判断来兼容各种浏览器!

时间: 2024-10-24 22:05:01

只存在于理想中的客户端JavaScript时间线的相关文章

ListView中镶嵌GridView实现时间线功能问题总汇

看了网上的时间线,基本都非常的差劲,不如自己写一个,实现的效果如下,在实现的过程中遇到了2个大的问题:1.gridView显示不全2.listview的item不可点击,那么下面写出我解决这两个问题的办法 一.GridView显示不全的问题 GridView 显示不全是因为ListView和GridView都是可以滚动的,在android中不可以在一个可以滚动的控件中镶嵌另一个可以滚动的控件,那么我们可以通过自定义GridView设置为不滚动. MyGridView import android

在Button的click事件中引起客户端JavaScript

void action1_Execute(object sender, SimpleActionExecuteEventArgs e) { WebWindow.CurrentRequestWindow.RegisterClientScript("test", "alert('test');"); }

JavaScript 客户端JavaScript之事件(DOM API 提供模块之一)

具有交互性的JavaScript程序使用的是事件驱动的程序设计模型. 目前使用的有3种完全不同的不兼容的事件处理模型. 1.原始事件模型 (一种简单的事件处理模式) 一般把它看作0级DOM API的一部分内容,所有启用了JavaScript的浏览器都支持它,因此它具有可移植性. 2.标准事件模型 (一种强大的具有完整性的事件模型) 2级DOM标准对它进行了标准化,除IE以外的所有浏览器都支持它. 3.IE事件模型 想用高级事件处理特性的JavaScript程序设计者必须为IE浏览器编写特定的代码

JavaScript 客户端JavaScript之脚本化HTTP(通过XMLHttpRequest)

XMLHttpRequest对象的设计目的是为了处理由普通文本或XML组成的响应:但是,一个响应也可能是另外一种类型,如果用户代理(UA)支持这种内容类型的话. 大多数浏览的客户端JavaScript都包含此功能. HTTP协议 规定了Web浏览器如何从Web服务请求文档,如何向Web服务器传送表单内容,以及如何响应 这些请求和传递. Web浏览器处理了很多HTTP(通常HTTP并不在脚本的控制之下) 1.用户点击一个链接 2.提交一个表单 3.输入一个URL 通常JavaScript代码可能脚

【JavaScript】javascript中伪协议(javascript:)使用探讨

javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javascript:void(0)">No response link</a> 将javascript代码添加到客户端的方法是把它放置在伪协议说明符号 javascript:后的URL中.这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运

JavaScript中伪协议 javascript:研究

将javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript:后的URL中.这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行.如果javascript:URL中的javascript代码含有多个语句,必须使用分号将这些语句分隔开.这样的URL如下所示: javascript:var now = new Date(); "<h1>The time is:</h1>" + now;

JavaScript学习笔记(一)在Html中如何使用Javascript

这是我学习javascript的第一篇学习日记,一开始写这篇bolg的时候感觉很基础以至于无处可写,无非就是把javascript代码放到<script>元素标签中,运行文件时可以让javascript代码被加载解析就行了.但细细思考,其实还有很多细节的地方需要注意,比如script标签放的位置不同会有不同的效果,为什么会出现<script>放置位置不同效果不同.script同步加载与异步加载的有何不同等等.所以写了这篇博客,算是自己学习javascript的第一步吧 ( ^_^

android 中java和javascript交互

android的WebView是一个非常强大的控件,本文主要针对其简单使用和笔者在使用时所遇到的问题做一些总结. 本文参考了该博文:http://blog.csdn.net/zgjxwl/article/details/9627685 一.WebView中Java与javascript交互 1.这是要和js交互的注入接口类: public final class JavascriptInteerface{ @JavascriptInterface public void test(String

Spring3拦截引发的问题——WEB开发中的客户端路径

什么是客户端路径? 第一类.也就是html或js文件等客户端访问的文件中的路径,这里包括一些资源文件的引入(js.css还有各种图片等),或是跳转到静态html页面,总之获取的都是静态资源 第二类.指定servlet跳转路径(比如<a href=""></a>或者location.href) 其实这两类本质都一样,都是通过请求服务器来获得相应的资源.在tomcat中一般用一个defaultServlet来处理静态资源的访问. 而第二类则一般是通过自己定义的<