4

次のhtmlドキュメントについて考えてみます。

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
alert("Hello")
</script>
</head>
</html>

Firefox、Safari、Chromeで開いた結果は、私のMacBookでも同じです。アラートメッセージに「こんにちは」と表示されます。私はこの答えを読んで、ブロワーの振る舞いを理解しようとしていました。主な部分は次のとおりです。

タグのコンテンツはCDATAとして扱われるため、コンテンツは解析されず、引用符で囲まれていないXMLまたはHTMLをコンテンツに格納できます(コンテンツにタグを挿入しない限り</script>、要素が閉じられます)。

Firefoxでソースを見るとどうなるか試してみましょう。

アラートコールに</script>が含まれるソースコードのスクリーンショット

表示されるブラウザの出力は")、スクリプトタグがアラート内で閉じられたと見なされるためです。私たちが本当に本当に表示したい場合にこれを克服する1つの方法"</script>"は、次のことを行うことです。

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
alert("<"+"/script>")
</script>
</head>
</html>

これでFirefoxはそれを理解します:

ソースコードのスクリーンショット

質問:

パーサーが最後の部分であるかどうかを確認するのは本当に簡単です</script>。これを確認するにはさらに時間がかかりますが、実行可能です(.に遭遇する前に引用符の数を数えます</script>。それでも終了タグである場合は、終了タグを探し続けます)。"</script>"問題は、これはjavascript内に記述できないルールですか?もしそうなら、私が気付いていないかもしれない他の微妙なルールは何ですか?

同じことが、たとえばphpパーサーにも当てはまります。<?php echo "?>" ?>。私はこれをテストしましたが、phpは実際の場所を知っているよう?>です。

4

1 に答える 1

4

正解です。インラインJavascript"</script>"内に書き込むことはできませんが、を書き込むことはできます。外部のJavascriptファイルでは、その制限はありません。"<\/script>"

Javascriptエンジンは、表示されるコンテキストに関係なく"</script>"、スクリプトの終わりと見なします。

XHTMLではなくHTMLを使用している限り、それが唯一の本当の落とし穴です。

XHTMLファイルとして提供されるXHTML [1]には、コメント--の最初と最後を含む、さらにいくつかの落とし穴があります。XHTML

[1]実際にXHTMLで提供されるXHTMLのものはごくわずかです。これは通常、HTMLとして機能し、タグスープパーサーによって処理されます。これは、埋め込まれたHTMLコメントから、CDATA属していないタグまで、すべてを理解できるものです。

于 2012-09-18T01:57:22.127 に答える