为什么在 DOM 解析没有完成时我可以得到 body 对象?
why i can get the body object when its DOM parsing no finish?
阅读后How Brower work,i know the the HTML parsing flow;
但是在这种情况下,为什么body dom对象可以得到呢?
(我在获取 body 标签对象的脚本上打断点);
据我所知,在 html 解析期间,Dom 构建将在解析器解析脚本时被阻止;是因为 bower 的推测性解析还是浏览器的容错?
(ps:我正在使用 chrome 凉亭)
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div>Before</div>
<script>
var body = document.getElementsByTagName('body')[0];
</script>
<div>After</div>
</body>
</html>
您可以从 JavaScript 获取 body
标签,因为您的 script
标签位于 body 本身内,这意味着 body
标签已经可供浏览器引擎使用。
如果您的 JavaScript 被添加到 header 中(这也很典型),您将无法获得 body
标签。示例:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script>
var body = document.getElementsByTagName('body')[0];
console.log(body); // undefined
</script>
</head>
<body>
<div>Before</div>
<div>After</div>
</body>
</html>
推测解析是一种技术,它允许浏览器通过在单独的线程上委托此操作来加速 HTML 解析器。基本上它会在下载脚本时提前解析 HTML 树结构。
阅读后How Brower work,i know the the HTML parsing flow;
但是在这种情况下,为什么body dom对象可以得到呢? (我在获取 body 标签对象的脚本上打断点);
据我所知,在 html 解析期间,Dom 构建将在解析器解析脚本时被阻止;是因为 bower 的推测性解析还是浏览器的容错? (ps:我正在使用 chrome 凉亭)
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div>Before</div>
<script>
var body = document.getElementsByTagName('body')[0];
</script>
<div>After</div>
</body>
</html>
您可以从 JavaScript 获取 body
标签,因为您的 script
标签位于 body 本身内,这意味着 body
标签已经可供浏览器引擎使用。
如果您的 JavaScript 被添加到 header 中(这也很典型),您将无法获得 body
标签。示例:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<script>
var body = document.getElementsByTagName('body')[0];
console.log(body); // undefined
</script>
</head>
<body>
<div>Before</div>
<div>After</div>
</body>
</html>
推测解析是一种技术,它允许浏览器通过在单独的线程上委托此操作来加速 HTML 解析器。基本上它会在下载脚本时提前解析 HTML 树结构。