ばけらの HTML リファレンス(未完成)

bakera.jp > 鳩丸リファレンス > ばけらの HTML リファレンス(未完成) > 要素一覧 > noscript要素

noscript要素

要素名バージョン開始タグ終了タグ分類/親中身
noscript4.0, X1.0, X1.1必須必須%block;(%block;)+

共通属性 …… %coreattrs;, %i18n;, %events;

noscriptの解説

noscript はスクリプトに対応していない環境のための代替内容を表します。この要素の中身は、ブラウザ自身がスクリプトに全く対応していないか、あるいはスクリプトの動作が無効に設定されている場合に表示されることになります。

重要な情報がスクリプトで提供されているような場合は、必ず noscript を用意してスクリプト無効環境でも問題なく利用できるようにしましょう。逆に補助的に使用しているスクリプトの場合 (たとえば、ボタンにマウスポインタを載せると色が変わるとか) には、特に noscript を用意しなくても問題ない場合があります。

ブラウザ自身がスクリプトに対応していても、script要素に指定された言語がサポート外のものだった場合、noscript の中身が表示されます。一つの文書内で 複数のスクリプト言語が使われている場合は、直近の script要素を参照します。たとえば、

<script type="text/javascript" src="another.js">
</script>
<p>……
……
<noscript>
<p>javascript が実行できませんでした。</p>
</noscript>
<script type="text/vbscript">
<!--
'vbscripts...
'-->
</script>
<p>……
……
<noscript>
<p>vbscript が実行できませんでした。</p>
</noscript>

このような場合、「JavaScript をサポートしているが VBScript をサポートしていない」ブラウザでは、先の noscript の中身は無視され、後の noscript の中身だけが表示されることになります。そのはずですが、多くのスクリプト対応ブラウザは「スクリプト機能がオンかオフか」だけを考慮して、言語の種類までは見ないようです。

※なお、これは言語をサポートしているか否かの問題なので、「javascript はサポートしているが another.js が not found だった」という場合、おそらく noscript の中身は表示されません。

文書に何かを書き込むとか、情報を表示するとか言った重要なスクリプトには、必ず noscript を記して代替を用意しましょう。

余談ながら、いにしえの時代に存在していた Netscape2 というブラウザは、script に対応しているのに noscript を認識せずに中身を表示してしまいました。その対策として以下のような表記を勧める人がいましたが……。

<script type="text/javascript">
<!--
javascripts ...
//--><p>scriptなしの人は<a href="foo.html">代替文書</a>をどうぞ。</p>
</script>

これは不可です。script要素の中身は CDATA で、終了タグ開始区切り子までがその中身と見なされます。要するに、"</" が出てきた時点で script 要素が終わると解釈されてしまうのです。従って、上記の例は不正です。

※script の終了タグは </script> ではなく </> (エンプティエンドタグ) かもしれませんから、 </ で終わらせないとまずいのです。もっとも、ほとんどのブラウザは </> を認識せずに </script> の出現を待ってしまいますから、</ を書いても平気です。逆に、script の終了タグを書き損じたりするとひどい目に遭います (と、経験者は語る)。

要は "</" がなければ良いので、上記の代替表記から <P> 以外のタグを取り除けば問題はありませんが、お分かりのように、代替文書にリンクさせるような器用なことはできず、簡単な説明が関の山です。さらに、script要素は理解するブラウザでスクリプトの実行をオフにしてあるような場合、何の表示もされないことになります。やはり noscript を使った方が良いでしょう。

最近の日記

関わった本など

ウェブの仕事力が上がる標準ガイドブック 5 Webプログラミング