为什么在 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 树结构。