Hatena Star を試してみた

no extension

久しぶりに七転八倒。 思わず Twitter で叫んじゃったよ(笑)

はてなダイアリー以外のユーザにも対応しているが, 癖ありすぎ。 その辺のブログパーツと同程度に考えてるとハマってしまう。 使い方はオフィシャルのヘルプより以下の記事のほうが詳しい。

呼び出してる JavaScript を見たら下のほうに簡単な説明があった。

はてなダイアリー以外のユーザの場合, JavaScript ソースを HTML のヘッダ部にでも設置すれば勝手にタグを解釈して勝手にボタンを追加してくれる。 一見便利なように見えるがこれが曲者。 はてなスターのスクリプトは, まず以下の構造を探して全てリストアップする。

<tag class="classname"><a href="http://uri.for/entry">Title of Entry</a></tag>

デフォルトで tag は h3 に, classname は不定(null)になっている。 tagclassname は Hatena.Star.EntryLoader.headerTagAndClassName プロパティで再定義できる。 例えばこんな感じ。

Hatena.Star.EntryLoader.headerTagAndClassName = ['h2', 'entry'];

この場合は

<h2 class="entry"><a href="http://uri.for/entry">Title of Entry</a></h2>

という構造を探すわけだ。 ここで注意しないといけないのは, classname に null を指定すると単純にクラス指定を無視してしまうということだ。 例えばデフォルトの

Hatena.Star.EntryLoader.headerTagAndClassName = ['h3', null];

指定であれば

<h3 class="entry"><a href="http://uri.for/entry">Title of Entry</a></h3>

<h3 class="side"><a href="http://uri.for/archive">Archive List</a></h3>

も全て有効になり, それぞれの場所にボタンが設置されてしまう。 なんでこんな恐ろしい仕様になっているかというと, おそらく はてなダイアリー ではひとつのページに複数の記事が並べられるレイアウトをとることが多く, それぞれの記事にボタンを設置しなければならないからだと思う。 はてなダイアリーと似た構造になっている日記コンテンツなどにとってはかなり有益だろう。 また記事のタイトルをアンカーで囲んでいないデザインを採用している場合は, 今回提供されているスクリプトではボタンを設置できない。 (まぁデザインを変えるかスクリプトを自作すればいいのかもしれないが。 うちはわざわざアンカーを入れてみた。 あんまり好きくないデザインなので はてなスター やめるかもw)

はてなスター はもうひとつ Cookie 絡みで問題が指摘されていた。

これについては既に対策されているようだ。

余談だが, Firefox で他ドメインの Cookie を拒否することはできる。 about:config を開いて network.cookie.cookieBehavior の値を 1 にセットすればいい。 バージョン 1.0.x の頃までは設定ダイアログで変更できてた筈なんだけど, 1.5 系以降では必要以上に設定ダイアログが簡素化されてしまった。 他ドメインの Cookie をどう扱うかはセキュリティ・リスクの観点からは非常に大事な問題なのだけど, この点は改悪だよなぁ。

認証がらみではもうひとつ問題があって, 例えば hatena.com でログインしている人は s.hatena.ne.jp のボタンを押せない(ログインしろといわれる)し, 逆に hatena.ne.jp でログインしている人は s.hatena.com のボタンを押せない。 アカウント情報等は DB を共有していると聞いているが, おそらくセッション情報がドメイン毎に別々になっているせいだろう。 まぁ日本語圏の人がわざわざ hatena.com でログインすることはないだろうから, どうということはないんだろうけど, やっぱり日本は特殊なんだねぇ(苦笑)

(追記) ううっ, やっぱり寝ぼけ眼でやってはいけない。 上の話は間違いかも。 s.hatena.ne.jps.hatena.com かは window.location,すなわち表示しているページの URL で決まるようだ。 つまり window.location のドメインに hatena.com を含む場合は s.hatena.com, それ以外は全て s.hatena.ne.jp の管轄になる。 どういうことかというと, はてな直轄のサービス以外はリージョンや言語に関係なく日本語の hatena.ne.jp を使わなくてはならないということだ。 ほっほう, これが「はてな」の言う国際化なのね。

ちなみに強制的に s.hatena.com にする方法はある。 以下のように Hatena.Star.BaseURL を上書きすればよい。

<script type="text/javascript">
  Hatena.Star.BaseURL = 'http://s.hatena.com/';
</script>

これ結構応用が利くかもしれない。