前回、環境変数を保存する改造を紹介したが、よくよく考えると、あそこまで大げさにやらなくとも、JavaScriptでちょこっとやっつける方法もあるなと思いついたものだから、今回はそいつを紹介だ。今回はPerl、つまりCGIの改造は扱わない。もっと単純な、web拍手ボタンのフォームを改造しようというのだ。といっても、改造というのもおこがましいくらいの、改良? その程度のものだから、あまり期待しないでいただきたい。
JavaScriptはCGIとは異なり、クライアントのブラウザ上で実行される。そのため、プログラムの内容が閲覧者に筒抜けになってしまうという問題があって、つまりなんの情報をとっているかということがばればれになるということだ。というわけで、ここは比較的理解の得られやすそうな、リファラ、どのページのweb拍手ボタンが押されたかということを調べたいと思う。
あ、一応断っておくけど、IPやリモートホストは非常にセンシティブな情報のように思われているけれど、普通一般においてはそれほど問題になるような情報ではないと思う。まあ、職場からアクセスしてたりすると企業名が出ちゃったりしてまずいけれど、学生さんなら学校がばれたりするかな? 気をつけるとしたらその辺で、普通に家庭で使っている程度だとプロバイダ名と、それから住んでいる地域かな? がわかる程度にすぎない(地域がわかりゃ充分だって人もいるかも知れないけど)。執拗に嫌がらせをしたいような場合だと別だと思うけれど、そうでないかぎりはそのIPやらリモートホストでもって個人が特定されるようなことはまあないので、気にすることはないと思うんだけど……。えっと、Yahoo! BBって、一旦割り当てられたIPがなかなか変わらないんだっけ? まあ、いろいろプロバイダによって癖はあるみたいだけど、けれどあんまり大げさに思う必要はないと思うんだ。
ちょっと話がそれた。ええと、リファラを取得するという話だった。このリファラであるが、拍手ボタンが押された後、お礼メッセージの表示されている段階ではリファラであるが、拍手ボタンがまだ押されていない段階ではリファラではなくて、そのページのURIが問題になる。つまり、ここで私がやろうとしていることはどういうことかというと、一言メッセージとしてそのページのURIを送るようなスクリプトを追加しようというのだ。そしてそれは、恐ろしく簡単にできてしまう。
JavaScriptで現在のページのURIを取得するには、document.URLを利用する。これで取得したURIを、input要素のvalue属性にセットして、document.writeで書いちまおうというわけだ。
web拍手CGIユーザーは次のようにするといいだろう。付け足す部分はいつものように強調している。
<form action="『clap.cgiのパス』" method="post" target="_blank">
<script type="text/javascript">
var urlstring = document.URL;
document.write('<input type="hidden" name="hitokoto" value="' + urlstring + '">');
< /script>
<input type="submit" value="web拍手ボタン">
</form>
今回の改良はCGIをいじるようなものではないので、web拍手公式サイトにて提供されるサービスを利用しているユーザーでも試してみることが可能だ。この場合、一言メッセージのフィールドの名前が違うので気をつけないといけない。具体的にいうと、name属性の値をmesbodyにしてやる必要がある。
<form action="http://webclap.simplecgi.com/clap.php?id=あなたのユーザID" method="post" target="_blank">
<script type="text/javascript">
var urlstring = document.URL;
document.write('<input type="hidden" name="mesbody" value="' + urlstring + '">');
< /script>
<input type="submit" value="web拍手ボタン">
</form>
さて今回の改良だが、思いついて試してみたのはいいのだが、無視できないくらいに大きな問題が発覚した。それはなにかというと、一言メッセージのコールバックなんだね。なにしろページのURIを一言メッセージで送っちゃってるものだから、あなたの送ったメッセージとしてページURIがどーんっと表示されてしまうのだ。これはまずい。JavaScriptだからプログラムが筒抜け云々以前の問題。なにしろ表示されてしまうんだから、こりゃ拍手くださった方を混乱させちまいそうな気がするなあ。
というわけで、今回の思いつきを使ってくださる場合は、読者の方々によくよくご理解いただいた上で設置していただきますよう、重々お願い申し上げます。
いいアイデアだと思ったんだけどなあ……。
< web拍手改造:さまざまな情報を取得する web拍手改造:改造に関するコメントレス(2007-09) >