2016-11-29 5 views
0

​​を読んだ後、私はHTML parsing flowを知っています。なぜDOMの解析が終了しないときにbodyオブジェクトを取得できますか?

しかし、この場合、本体DOMオブジェクトはなぜ取得できますか? (bodyタグオブジェクトを取得するスクリプトでブレークポイントを作成します);

私はhtml解析中に知っているので、パーサーがスクリプトを解析するとDom bulidingはブロックされます。それが理由亭投機的解析またはブラウザのエラー耐性のある ?(PS:私はクローム亭を使用しています)

<!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> 

答えて

0

あなたscriptタグは本体自体の内部にあるので、あなたは、JavaScriptからbodyタグを取得することができ、これは、bodyタグがすでにブラウザのエンジンで利用可能であることを意味します。

JavaScriptがヘッダーに追加されている場合(これもまた典型的です)、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ツリー構築を解析します。

+0

答えていただきありがとうございます。あなたは正しいと思います。記事の "ブラウザの仕組み"を見直し、htmlパーサーがパーズツリーにタグトークンを追加することを確認します。 –

+0

@ tao.wengそれがあなたを助けてくれてうれしいです。ハッピーコーディング:) – GibboK

関連する問題