Add Tab Index for Googleを公開しました

Firefox用のgreasemonkey「Add Tab Index for Google」をバージョンアップしました。

Add Tab Index for Googleとは?

Googleの検索結果ページを3倍ぐらい使いやすくするためのgreasemonkeyです。
[1]検索結果の最初にフォーカスが当たる (Enterキーを叩くだけで検索結果の一番目が開ける!)
[2]検索結果のタイトルにタブインデックスを追加する (Tabキーを押して検索結果を移動できる!)


Ver1.1の変化点

  • 新しいGoogleのページで動かない不具合を修正
  • 動画検索ページを開いた時にもフォーカスが当たってしまう不具合を修正
  • タブキーでフォーカスを移動した時に要約部分が見えるように自動スクロールする機能が、Firefox3.6で使えなくなっていた不具合を修正

ダウンロードは こちら(Add Tab Index for Google) からどうぞ!


今回は不具合修正のみです。
新しいGoogleのページで動かないのはちょっと予想外・・・。


それと予想外だったのがFirefox3.6になって、微妙にフォーカスイベントの動作が変っていたこと。

Add Tab Index for Googleでは、イベントオブジェクトの explicitOriginalTarget プロパティ(Firefox独自の実装)をキーボードでフォーカスを当てたかマウスで当てたかを区別する目的で使っていました。
ただ、このオブジェクトがFirefoxで実装された理由は「イベントが発生した時にその元になったノードを格納するため」。

For example, mouse events are retargeted to their parent node when they happen over text nodes (see bug 185889), and in that case currentTarget will show the parent and explicitOriginalTarget will show the text node.
たとえば、テキストノード上でマウスイベントが発生したときはターゲットが親のノードへ移る。そのような場合は currentTarget に親ノードが、explicitOriginalTarget にテキストノードが見えるだろう。

Event.explicitOriginalTarget - Web APIs | MDN

リンクをクリックした場合、「Aタグ」上でイベントが発生したみたいになりますが、正確には「テキストノード」上でイベントが発生するので、それを正確に取りたければ explicitOriginalTarget を見ればいい、ということ。


例にもあるように、これはもともとマウスによってイベントが発生した時のためのもので、
キーボードでイベントが発生した場合は何を入るかがあいまいだったみたいです。
それで、バージョンアップに伴って

  • Firefox3.5 -> 選択したオブジェクト (target と同じオブジェクト)
  • Firefox3.6 -> 直前のオブジェクト

に変更になっていました。


それでこっちのスクリプトがバグりました(長い言い訳だなぁ(笑))