(published: Mar. 14, 2000 / modified: Oct. 4, 2002)
昨日からTINAMIのアクセス解析サービスを始めた訳ですが、 そこで使われる解析用のフレーズを埋めこむのに苦労したという話です。
まずTINAMIでアクセス解析を申し込むと、 下の様なHTML文書が出てきます。
<!--ここから--> <SCRIPT type="text/javascript"> <!-- var uid="xxxxxxxx"; var ref=window.document.referrer; var tag="<A HREF=\"http://webstat.tinami.com/gw.cgi?"+uid+"\"><IMG SRC=\"http://webstat.tinami.com/banner.cgi?id="+uid+"&rf="+ref+"\" BORDER=\"0\" ALT=\"[TINAMI]\" WIDTH=88 HEIGHT=31></A>"; document.write(tag); // --> </SCRIPT> <NOSCRIPT> <A HREF="http://webstat.tinami.com/gw.cgi?xxxxxxxx"><IMG SRC="http://webstat.tinami.com/banner.cgi?id=xxxxxxxx&rf=noscript" WIDTH=88 HEIGHT=31></A> </NOSCRIPT> <!--ここまで-->上記のテキストエリア内のタグをコピーして、あなたのサイトのトップページ(TINAMIに登録されているURLのページ) の好きなところに貼り付けてください。
しかし私のサイトのトップページ
は
XHTML1.0strict準拠なので、
このまま埋めこむとSGMLの仕様すら満たさない謎文書になること請け合い、
しかもJavaScriptの知識も皆無、
という訳でW3Cの仕様書その他とニラメッコしつつソースを改造しました。
SCRIPT
要素の中身は#PCDATAなので、
スクリプトをコメントで隠すことが出来ない
(スクリプトがコメントとして無視される場合がある)。
マーク区間<![CDATA[…]]>
を使う手もあるけれど、
外部ファイルにしたスクリプトをSCRIPT
要素のsrc
属性で取りこむことにしようimg
タグの閉じ方もXML仕様に変更しておかないと&
は常に実体参照を使って&
と書かなければならない。
外部ファイルにしたスクリプトでの実体参照はよく分からないけれど、
取り敢えずこちらも実体参照にしておこうnoscript
要素側のimg
要素のalt
属性が無い。
これも追加しておこうnoscript
要素直下にはブロック要素しか置けなかった
(インライン要素を直書きするのは禁止)。
ここではp
要素を使って内容をブロック要素だけにしたimg
要素がbody
要素直下に現れるのを避けるため、p
要素の子になるようにした。こうした改造によってアヴァンタイトルに埋めこまれたスクリプトは、 はMozilla browserでもInternet Explorer 5でも作動し、 文書自身もAnother HTML-Lint でエラーの出ないものとなりました。
まずはHTMLパートのソースを。
<script type="text/javascript" src="tinami.js"> </script> <noscript> <p> <a href="http://webstat.tinami.com/gw.cgi?xxxxxxxx"><img src="http://webstat.tinami.com/banner.cgi?id=xxxxxxxx&rf=noscript" alt="[tinami]" width="88" height="31" /></a> </p> </noscript>
そして外部スクリプトは下の様になります。
var uid="xxxxxxxx";
var ref=window.document.referrer;
var tag="<a href=\"http://webstat.tinami.com/gw.cgi?"+uid+"\"><img src=\"http://webstat.tinami.com/banner.cgi?id="+uid+"&rf="+ref+"\" border=\"0\" alt=\"[TINAMI]\" width=\"88\" height=\"31\" /></a>";
document.write("<p>");
document.write(tag);
document.write ("</p>");
JavaScriptの知識が無い状態での突貫工事だったので、出来は今一ツです。 特に外部スクリプトでの実体参照など、未だに謎な部分が多いです。
一番の問題はスクリプト関係の要素及び属性が完全封印されている ISO/IEC 15445:2000でどうやって組み込むかです。 一番良いのは参照元の探知もサーバ側で全部やってくれることなのですが。