2017-07-01 6 views
0

<script>タグを認識していない古いブラウザの場合、HTMLコメントはJavascriptで許可されます。クロム - Javascriptエンジンの解析動作

参考:Are HTML comments inside script tags a best practice?

だから、JSパーサは、解析のために無視されるスクリプトの開始、で<!--することができます。また、-->の接頭辞は//にする必要があります。これにより、JSエンジンも無視されます。

参考W3C:https://www.w3.org/TR/REC-html40/interact/scripts.html#h-18.3.2

これで遊んでいる間、私はこの奇妙な振る舞いを見ました。ここで

<script> 
    <!-- 
    alert(1); 
    --> 
</script> 

は、-->はクロームJSエンジンによるエラーをスローする必要があります//、前置されていないことに注意してください。しかし、Chrome JSエンジンはそれらをコメントとみなし、解析を無視します。どうして? (Q1)

そして、別の行動:

<script> 
    alert(1); 
    -->''>{][} 
</script> 

このスニペットは、アラートを実行します。ここでは、-->の場所に注意してください。この特定の文字列は、パーサーignoreに続いて他のすべての不正な値を生成します。 つまり、-->の代わりに、他の文字/シーケンスを使用すると、エラーが発生します。

ここで何が起こっていますか? -->はどのようにこのスニペットを有効にしますか? (Q2)

注:-->シーケンスの先頭に新しい行を付ける必要があります。つまり、

<script> 
    <!-- 
    alert(1); -->''>{][} 
</script> 

はエラーとなります。もう一度、なぜですか? (Q3)

答えて

0

あなたが提供した3つのコードスニペットで、Chromeで「Uncaught SyntaxError:Unexpected token <」というエラーが表示されます。

+0

コードをコンソールに貼り付けると、「」タグは無視されます。 –