【问题标题】:Execution order of htmlhtml的执行顺序
【发布时间】:2013-04-10 06:39:01
【问题描述】:

我想知道HTML解析器的解析顺序。

给定两个 html 文件:

page1.html

<html>
<body>
<iframe id="x" src="page2.html"></iframe>
<div id="z"></div>
<--! something that need to be parsed -->
</body>
</html>

page2.html

<html>
<body>
<div id="y">
<body>
</html>

我知道 iframe 标记会并行下载 src(即,虽然 iframe src(在示例中为 page2.html)尚未下载,但 HTML 解析器会解析 iframe 标记的后续行)。 那么问题来了,什么时候解析page2.html? 换句话说,当 div 元素 (id=y) 添加到 DOM 树时? 是在page1.html中解析代码后完成还是在page2.html完成下载后立即完成通过blockinig page1.html解析?或者,HTML解析器是否并行(同时)解析page1.html和page2.html?

任何 cmets 和链接将不胜感激。 谢谢!

(如果有错误的问题,请告诉我。实际上,我是 JavaScript 和 HTML 的新手)

【问题讨论】:

  • 只是好奇,你为什么在乎?
  • 假设page1.html中有一个函数访问page2.html中定义的对象。该函数可以访问未定义的东西取决于解析顺序
  • 值得看文章知道答案吗?文章是为了什么?请简要介绍一下。
  • 基本上,它为您提供了一种设置事件监听器的方法,而不是试图猜测首先加载的内容。

标签: javascript html parsing iframe web


【解决方案1】:

实际完成的顺序取决于浏览器,但在典型的浏览器中,它首先在您正在访问的页面中构建 HTML 树,然后对其进行处理。当它开始处理 iframe 时,它​​会去请求该页面。

现在,由于 HTML 是从服务器以块的形式下载的,因此从部分树中,它可能会在 iframe 甚至还没看到第 1 页的一半之前就开始从 iframe 下载内容。

但要点是您不应该依赖这种行为。

【讨论】:

  • 你能解释清楚一点吗?我的问题的答案是什么:)?
  • @freddy 你的问题在答案中得到了解释:你不能确定。不要依赖行为。如果您需要了解,可以添加事件监听器。
【解决方案2】:

具体时间取决于浏览器。 page1 应该先下载并准备好,然后 page2 准备好。但是,page1 在开始下载和解析page2 之前还没有准备好。

【讨论】:

  • 我没有投反对票,但您的第二句话似乎取决于对 page1page2 的相对大小的未说明假设。
猜你喜欢
  • 1970-01-01
  • 2011-10-26
  • 2011-09-17
  • 1970-01-01
  • 2016-08-07
  • 2013-11-15
  • 2019-07-18
  • 2020-03-13
相关资源
最近更新 更多