Alternative Design Project

ADP: クッキーとValidなStrict HTML

2004年03月12日 18:28 | コメント(2) | トラックバック(3)

また現実逃避。さいきん濃ゆいネタばかりですが。

Movable Typeのテンプレートを使ってValidなStrict XHTML(たとえばXHTML 1.0 Strict)を出力したい、というのは誰しも考えることだと思う。今日やったのは、そのための関門のひとつ、Comment書き込み画面でクッキー入出力(名前やURLの記憶)を保持したまま、かつValidにするという方法。ぶっちゃけていえば、今日までValidではなかったわけだが、許せ。

まず、念のため、Individual Entry ArchiveのJavaScriptをすべて外部scriptにする。元のテンプレートではJavaScript部分はコメント(<!-- ~ -->)にして書いているのだが、XHTMLでは本当のコメントとして解釈されてしまう。Individual Entry Archive後半の、

<script type="text/javascript" language="javascript">
<!--
document.comments_form.email.value = getCookie("mtcmtmail");
document.comments_form.author.value = getCookie("mtcmtauth");
document.comments_form.url.value = getCookie("mtcmthome");
if (getCookie("mtcmtauth")) {
    document.comments_form.bakecookie[0].checked = true;
} else {
    document.comments_form.bakecookie[1].checked = true;
}
//-->
</script>

であれば、コメントではさまれた8行だけを別ファイル(たとえば、comment.js)として保存し、<$MTBlogURL$>にあたるディレクトリにアップロードする。テンプレートの上記の部分(<script>~</script>)は、

<script type="text/javascript" src="<$MTBlogURL$>comment.js"></script>

のように書き換える。これはもっと楽な方法もあると思う。詳しい話は、森田さんの記事 - iNTERNET magazine 2003年11月号109ページ(プロが教えるMovable Typeの構造デザインから記事を入手可能)、またはRe: Movable Typeスレッド その2なんかを参照のこと。

で、肝は、comment.jsの8行が、form要素のname="comments_form"を利用していること。XHTML 1.0 Strictなんかではform要素にname属性は使えない。nameをidに変えるだけでは、JavaScriptのエラーになってしまう。そこで、comment.jsを書き換えなければならない。

中身を解読してみると、email, author, urlのvalueと、ラジオボックスをいじっているだけだとわかる。そこで、comment.jsを、DOMを利用して以下のように刷新する。

if(document.getElementById && document.createElement){
 document.getElementById('email').setAttribute('value',getCookie("mtcmtmail"));
 document.getElementById('author').setAttribute('value',getCookie("mtcmtauth"));
 document.getElementById('url').setAttribute('value',getCookie("mtcmthome"));
 if (getCookie("mtcmtauth")) {
   document.getElementById('bakecookie').setAttribute('checked','checked');
 } else {
   document.getElementById('forget').setAttribute('checked','checked');
 }
}

最後に、Individual Entry Archiveの

<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" onsubmit="if (this.bakecookie[0].checked) rememberMe(this)">

から、name="comments_form"を削除すれば任務完了。

トラックバック(3)

トラックバックURL: http://adp.daa.jp/cgi/mt2/mt-tb.cgi/79

id 属性と name 属性 (2)(dotnote Days...): 2004年03月14日 00:42
コメントを書く際にクッキーを食べさせ隊の続き。 冷静に考えれば、 dotnote Days... は <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> と宣言しているのだから、form 要素に name 属性...
クッキーとValidなStrict HTML(続)(Alternative Design Project): 2004年03月16日 23:47
[これまでのあらすじ。XHTML 1.0 Strictなんかではformにname要素は使えないので、クッキーの表示にDOMを使ったのがクッキーとValidなStrict HTMLのはなし。表示でDOMを使ったんだから、Remember info?ときくところでもDOMを使えば、と考えて、失敗したのがうまくいかない...
個別エントリのXHTML1.1化(the meager): 2004年10月25日 20:16
クッキーとValidなStrict HTML(Alternative Design Project) ようやくほぼ全てのページでW3CのXHTML1.1のValidatorをパスできました。Individual Entry Archivesのテンプレのformタグのname属性をどうにかしたかったの......

コメント(2)

Momomo: 2004年03月12日 22:46

一文追記。ここが勘違いしやすいポイントかも(その後も細かく修正しておりますが)。

Momomo: 2004年03月13日 13:19

よい関連サイトがあったので後付けトラックバック http://d.dotnote.jp/id/2004/03/01

コメントの内容確認のため、反映されるまで時間がかかる場合があります。e-mailはサイトに掲載されません。

このページの先頭へ