最近はNoScriptというアドオンを入れてwww.google.co.jpのJavaScriptが動作しないようにしているのだけれども、なんか一部のページにうまくジャンプできない。一部っていうか今のところ確認しているのははてなキーワードなんだけど。
たとえば、「えーりん」でぐぐると4番目くらいに「えーりんとは - はてなダイアリー」へのリンクが出てくる。URIはhttp://d.hatena.ne.jp/keyword/%A4%A8%A1%BC%A4%EA%A4%F3だが、リンクをクリックするとhttp://d.hatena.ne.jp/#15562144654168186643に飛ばされてしまう。次に「八意永琳とは - はてなダイアリー」へのリンクがあるが、これも同様にhttp://d.hatena.ne.jp/#794580410899516888へ飛ばされる。http://www.google.co.jpのJavaScriptを許可すればちゃんとアクセスできるので、JavaScriptが悪さをしているはずだ。いや、ほかのサイトへはJavaScriptを切った状態でも問題なくいけるのだからはてなのせい? EUC-JPで符号化されたパーセントエンコード文字列のせい? よくわからん。
問題の箇所のHTMLはこんな感じ (改行を適宜加えた):
<div class=g>
<!--m-->
<a href="http://d.hatena.ne.jp/keyword/%A4%A8%A1%BC%A4%EA%A4%F3" class=l onmousedown="return rwt(this,'','','res','4','AFQjCNEheFh-m3xOWHKSeKRR4oZxY6bVnw','&sig2=yvdsgt0rLw31Vn8tAHiRDg')">えーりんとは - はてなダイアリー</a>
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td class="j"><font size=-1><b>えーりん</b> - 東方永夜抄に登場するキャラクター「八意永琳」の愛称。 または「竹取飛翔 ~ Lunatic Princess?」の1:22以降の歌詞を指す。 「<b>えーりん</b>、<b>えーりん</b>」と聞こえることから、...<br>
<span class=a>d.hatena.ne.jp/keyword/%A4%A8%A1%BC%A4%EA%A4%F3 - 28k - </span><nobr>
<a class=fl href="http://72.14.253.104/search?q=cache:EahvS9ZbSXoJ:d.hatena.ne.jp/keyword/%25A4%25A8%25A1%25BC%25A4%25EA%25A4%25F3+%E3%81%88%E3%83%BC%E3%82%8A%E3%82%93&hl=ja&ct=clnk&cd=4&gl=jp">キャッシュ</a> -
<a class=fl href="/search?hl=ja&q=related:d.hatena.ne.jp/keyword/%25A4%25A8%25A1%25BC%25A4%25EA%25A4%25F3">関連ページ</a><span class=bl> -
<a class=fl2 href=# onclick="return gnb._add(this, 'http://d.hatena.ne.jp/keyword/%A4%A8%A1%BC%A4%EA%A4%F3')">メモをとる</a></span></nobr></font>
<!--n-->
</td>
</tr>
</table>
</div>
間違いなくa要素のhref属性はhttp://d.hatena.ne.jp/keyword/%A4%A8%A1%BC%A4%EA%A4%F3だ。onmousedown属性に指定されているrwt()関数はトラッキングか何かのためにhref属性を書き換える働きをしているが、JavaScriptが無効な場合は当然実行されず、そのままhttp://d.hatena.ne.jp/keyword/%A4%A8%A1%BC%A4%EA%A4%F3へのリクエストが発生するはずだ。なのになぜかhttp://d.hatena.ne.jp/#15300708317339384587へのアクセスになってしまう。
何が起こったのかFirebugで確かめてみたが、UA的にはちゃんとhttp://d.hatena.ne.jp/keyword/%A4%A8%A1%BC%A4%EA%A4%F3をリクエストしているようだった。http://d.hatena.ne.jp/keyword/%A4%A8%A1%BC%A4%EA%A4%F3をリクエストしてhttp://d.hatena.ne.jp/のHTMLがレスポンスされているようなのでLocationとかされているはずなのだが、FirebugのコンソールにLocationフィールドは見当たらない。
NetタブからリクエストヘッダをコピーしてTelnetから同じリクエストを投げてみたが、ちゃんと「えーりんとは」のHTMLがレスポンスされた。別にGoogleからのリファラだからどうのとはてなが変なことをやっているわけでもなさそうだ。一体どこでhttp://d.hatena.ne.jp/#15300708317339384587へのリダイレクトが行われているのだろうか。ふしぎふしぎ。
今回のまとめ:
- JavaScriptを切った状態でGoogleの検索結果からはてなキーワードに飛ぼうとするとフラグメント参照を伴った状態ではてダのトップページに移動してしまう
- 今のところ、ほかのサイトでは同様の現象を確認していない
- JavaScriptを有効にすれば問題は起こらない
- Firebugを使ってどんな通信が行われているのか追いかけてみたが、怪しいところは見つからなかった