![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="jp-JP">
<head>
<title>try</title>
<script type="text/javascript">
<![CDATA[ function try01(){window.alert("try");} ]]></script>
</head>
<body onload="try01();">
<h1>try</h1>
</body>
</html>
以上のHTML文書を実行すると構文エラーになります。
私には、どこに問題があるか、わかりません。
何が問題なのか、分かる方がいらっしゃいましたら教えていただきたく思います。
No.4ベストアンサー
- 回答日時:
とりあえず、
<script type="text/javascript">
// <![CDATA[
function try01(){window.alert("try");}
// ]]>
</script>
のようにコメントに入れてしまえば一応うまくいきます。
この回答への補足
回答ありがとうございます。
この場合、パーサはCDATAセッションを正しく解釈するのでしょうか?
それとも、コメントアウトされた文字列として扱うのでしょうか?
パーサのする処理を考えると、多分、CDATAセッションとして正しく解釈されると思うのですが、それで間違いないでしょうか?
No.9
- 回答日時:
># 「<![CDATA[」と「]]>」をコメントアウトするのってある種の決まり文句みたいなものだと思ってたんですけど、そうでもないのかなぁ
私の読んだことのある本XHTML(オライリー)の本では、
使わない方がいいようなコメントでした。(#1のようにするのではなく、外部スクリプトにする)
#1の場合、XHTMLとしてイレギュラーになる場合があるから逆は成り立たずでダメですね。(書いたときはIEでXHTML解釈できないから、それでいいや的に思っていました)
//でスクリプトとしてコメント化するのも試してはみたけど、
それってXHTMLとして解釈できてないということなので、
(DOMで検証してみました。IEの場合、パースしてない。firefoxで、.xhtmlの場合は、ちゃんとできていますが、テキストノードが分割されるのが気に入らないね)
(回答としては)やめちゃいました。
結局の処、XHTMLとして記述しても、HTMLとして解釈実行させているのであれば、しょうがないような気がします。
firefoxなどでは、拡張子をxhtmlにすることで正しく処理できますが、
他のに合わせて.htmlにしてたら、処理しないワケで、
XHTMLとして記述してXHTMLとして処理しないのなら、XHTMLで書いてどうなの?
とか思います。(他からプログラム処理的に読まれる時に便利!ってとこなんだろうね)
IEの場合、XMLとして、XSLTを使ってHTMLにして表示なんていうのもありかもしれませんが、なにやってんだかって感じですね。
ブツクサ言ってみましたf(^^;
No.8
- 回答日時:
> 気分を害されたのであれば、すみません
いえいえ、とんでもない。
ただ BLUEPIXY さんが「自信なし」とのことだったので もしやと思っただけのことです。
# 「<![CDATA[」と「]]>」をコメントアウトするのってある種の決まり文句みたいなものだと思ってたんですけど、そうでもないのかなぁ
# あ、いまさら恐縮ですが、「CDATA セッション」じゃなくて「CDATA セクション」ですよ > 質問者さん
No.7
- 回答日時:
>#6
解説されたようなことは、一応わかっております。
なんか、気分を害されたのであれば、すみません。
#1の補足で、質問者の意図として、CDATAセクションの中に書くというような意図だと思ったのでそのように書きました。
結局、そういうこだわりでないなら、余計なことでした。
No.6
- 回答日時:
> CDATAの外に(スクリプトを)書いたら意味無い
え? 何のために CDATA セクションにするのか分かっていらっしゃいますよね?
念のため一応解説しましょう。
XHTML では、script 要素の内容は PCDATA として定義されています。PCDATA なので、「&」や「<」をそのまま書くことができません。
そこで、「&」や「<」をそのまま書くことができるようにするために、CDATA セクションを用います。
ゆえに、スクリプトの中に「&」も「<」も出てこないのであれば CDATA セクションにする必要はありません。同じく、CDATA セクションの外に「&」「<」以外の文字・記号を書くことも構いません。
さて、No.4 の方法ですが、XHTML を正しく解釈するパーザでは、CDATA セクションとして正しく解釈されます。まず文書が XHTML として解釈されるときに CDATA セクションも CDATA セクションとして解釈されます。そしてスクリプトが実行されるときにはマークアップが取り除かれて
//
function try01(){window.alert("try");}
//
というスクリプトが実行されることになります。
CDATA セクションを解釈できない古いブラウザでは、script 要素の内容がそのままスクリプトとして解釈されますが、「<![CDATA[」と「]]>」はコメントとみなされるのでエラーは発生しません。
回答ありがとうございます。
妥当検証パーサを使用して、「妥当なXML文書」として解析された文書であるのに、何故かエラーがなくならないので悩んでいたのですが、script全体をscriptとして解釈していたのですね。
なるほど、CDATAセッションをコメントアウトしてしまえば巧くいくのですか。
とりあえず、#4の方法で実行しようと思います。
他に何か方法をご存知の方がいらっしゃったら教えてください。
No.3
- 回答日時:
折衷案としては、
<script type="text/javascript" src="./try01.js"></script>
のような外部呼び出しにしてしまうことじゃないかと思います。
もう少し待てば、もっと詳しい人の回答が得られるかもしれませんが・
No.2
- 回答日時:
><!-- -->の間は、解析する前に捨てられると思うのですが?
確かにそうですが、HTMLでそれはコメントとして通用しますが
<!-- -->
と
<![CDATA[]]>
は、同じではありませんし、CDATAは、コメントでもありません。
>実体参照で書くか、CDATAセッションを使うように言われています。
それはそうですが、ブラウザがそのように対応していいないのならしょうがありません。
No.1
- 回答日時:
IE6で、ファイルの拡張子がhtmlの時
HTMLとして解釈されるために、
CDATAでエラーになります。
<![CDATA[
]]>
を削除すれば実行できるようになります。
ちなみに、
firefoxでも同じエラーになりますが、
firefoxの場合、
拡張子をxhtml にすると、正しく実行できます。
IE6の場合、拡張子をxhtml にすると、XMLとして正しく解釈できるようになりますが、HTMLとしてレンダリングされません。
簡単に言うと、今の処未対応ということですね。
当分
<script type="text/javascript">
<!--
//-->
</script>
のスタイルでCDATAは使わないで書くのがいいようです。
この回答への補足
回答ありがとうございます。
CDATAは使わない方が良いとの指摘ですが、この文章はXHTMLですので、正しい動作をするパーサですと、<!-- -->の間は、解析する前に捨てられると思うのですが?
また、W3Cではscriptタグは#PCDATAを持つと定義されているので、実体参照で書くか、CDATAセッションを使うように言われています。
ですので、できればこのままCDATAセッションで行きたいのですが、何か方法はないのでしょうか?
http://www.w3.org/TR/2002/REC-xhtml1-20020801/#h …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- ASP・SaaS FC2 BLOG <AUDIO TAGを入れプレビューはOk テーンプレートを更新すると ✖ 1 2023/08/14 11:40
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- HTML・CSS (Javascript)印刷するファイルに応じて印刷プレビュー画面で用紙を自動的に切り替えたい!! 2 2022/04/11 12:04
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「関数が定義されていない」と...
-
Vbscriptで自分自身のウィンド...
-
<aタグで変数に文字を代入
-
showModalDialogで開いた画面か...
-
lightboxの自動実行
-
<a href="#" …>の意味を教えて...
-
<div>のタッチ状態を維持したま...
-
ポップアップウィンドウの位置
-
bxslider、画像が3枚以上になる...
-
javascriptとApacheの設定
-
「jquery.csv2table.js」から生...
-
別ファイルのfunctionの読み込み方
-
ページを訪問者にたった一度だ...
-
bodyにidをつける理由は何ですか?
-
html タグの意味
-
ボタンのID名を取得するには?
-
Dreamweaver で 外部JSを読み込...
-
javascript内で外部ファイルを...
-
テキストボックス内にハイパー...
-
エラー行の行数の不思議
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vbscriptで自分自身のウィンド...
-
Cygwinでログをのこす方法
-
onbeforeunload時のwindow.open...
-
JavaScriptからVBScriptの呼び...
-
リンク先のJavaScriptを実行す...
-
javascriptでbgmを自動再生する...
-
JavaScript関数呼出し元の要素...
-
【js】attrで属性を取得する...
-
undefinedが表示されてしまう
-
「関数が定義されていない」と...
-
ASP.NET(VB2005)■ WEBページ...
-
ウインドウの後ろに隠れている...
-
表示サイズの小さいホームペー...
-
datepickerで日付の値を取得したい
-
マウスオーバー時の下線表示に...
-
毎回、ページ読み込み時に1回...
-
ウィンドウが閉じない
-
javascriptでtableの該当行を削...
-
確認ダイアログで「キャンセル...
-
JavaScript ランダムリンク+自...
おすすめ情報