「JavaScript/XML」の版間の差分
削除された内容 追加された内容
M {{Nav}} |
2021年6月現在の現状を反映 |
||
4 行
しかしながら、XML規格にきちんと対応しようとすると、HTMLの時にはあまり問題にならなかった事が問題となってきます。
; 2021年6月13日追記
==script要素内のコメントアウト==▼
: 冒頭のパラグラフの「現在」は概ね200X年代の状況です。
HTMLでは、script要素に対応していないブラウザでスクリプトが表示されてしまわないように、script要素の内容をコメントアウトすることができます。script要素を全く知らないユーザーエージェントにとって、script要素の内容は、CDATA型ではなく、#PCDATAですから、HTMLのコメントの体裁をしていれば、当然、HTMLのコメントとして処理してしまうわけです。したがって、次の例では、script要素に対応していないユーザーエージェントは、script要素の内容をコメントアウトします。▼
: 現在、XHTMLを主導的に標準化してきたW3Cは[[w:ウェブ標準|ウェブ標準]]の策定を [[w:WHATWG|WHATWG]] に譲っています<ref>https://www.w3.org/blog/news/archives/8909</ref>。
: XHTML2.0 は正式に廃案になりました。
: HTML5は[https://html.spec.whatwg.org/multipage/ HTML Living Standard]が標準となっています。
: HTML5ではXHTMLは、HTML5のXML構文との位置づけられるともに、XHTMLの語は標準仕様書のなかでは用いないとしている<ref>https://html.spec.whatwg.org/multipage/xhtml.html#writing-xhtml-documents</ref>。
▲HTMLでは、
<source lang="html5"><script><!--
document.write("Hello World");
//--></script>
</ ただし、
* 現在利用されているブラウザの大半は
* メジャーなユーザーエージェントの多くが、スクリプトエンジンが無くても
などの実情があります。これに甘えれば、コメントアウトの必要性自体がかなり低くなってきていると言えなくもないわけです。
どうしても気になる場合は、
<source lang="html5">
</source>
ところで、
▲ <script type="text/javascript" src="hello.js"></script>
▲要するに、script要素の内容は空にしておいた方が無難です。
▲ところで、script要素を認識しているユーザーエージェント、つまり、script要素の内容をCDATAとして扱っているユーザーエージェントは、この内容の終わりを知る術が無いように思われるかもしれません。しかし、これは、HTML仕様にきちんと書かれていて、「</」の2文字が出現する直前までがCDATA区間、つまり、script要素の内容である、ということになっています。ただし、実装レベルでは、この仕様を守りつつ、より高度な判定をするように作られています。とはいえ、文字列中に「</」が出現するようなスクリプトをscript要素の内容に書く場合には、「<\/」のように記述する方が好ましいでしょう。
== 「<」や「&」の取り扱い==
JavaScriptでは、「<」や「&」を演算子として用いる事が良くありますが、
「&」や「<」はXMLにおいて特別な意味を持つため、
<source lang="html5">
<script>
if(a < b && b < c) document.write("a < c");
</script>
</source>
そのため、<や&は実体参照を用いて、それぞれ &lt; &amp; と記述しなくてはなりません。
しかし、この方法は対応していないブラウザが多いためあまり実用的ではありません。
<source lang="html5">
if(a &lt; b &amp;&amp; b &lt; c) document.write("a &lt; c");
</script>
</ そのため、
<source lang="html5">
<script src="abc.js"></script>
</source>
どうしてもコンテンツ内に書きたいという場合は、CDATAセクションを用いることで、&や<を&amp;や&lt;で置き換えずに済みます。
<source lang="html5">
<script><![CDATA[
if(a < b && b < c) document.write("a < c");
]]></script>
</source>
ただしCDATAセクションで囲っただけでは、CDATAセクションに対応していないブラウザでJavaScriptエラーが発生する可能性があります。
しかし、<![CDATA[ と ]]>の前に一行コメントの // を付けてコメントアウトする事で、この問題は回避可能です。
<source lang="html5">
<script>//<![CDATA[ この部分にコードを書いても無視されるので注意
if(a < b && b < c) document.write("a < c");
//]]>
</script>
</source>
[[Category:JavaScript]]
|