Add Tab Index for Googleをバージョンアップしました。
Firefox用のgreasemonkey「Add Tab Index for Google」をバージョンアップしました。
Add Tab Index for Google ver0.6
・戻るで戻ってきても、極力フォーカスが当たっているようにした
・検索結果上部のGoogleサービス一覧(画像、動画、地図…etc)にフォーカスが移動できるようにした
・「乗り換え案内」が表示されているとリンクではないところフォーカスが当たる問題を修正
ダウンロードは こちら(Add Tab Index for Google) からどうぞ!
「戻る」でフォーカスが当たらなくなる問題はクッキーで暫定対処しました。
でも、これでも問題が。
ここで少し問題点を整理してみたいと思います。
一口に「戻る」機能といってもFirefoxにはいくつかの挙動があります。
- ページのレンダリング結果をそのままメモリ上に保持する「Back/Forward Cache(bfcache)」
- フォーカス位置も保持
- JavaScriptの実行結果も保持している。そのため、Greasemonekyは再実行されない
- Firefoxの設定やメモリ量にもよるが、5〜8ページぐらいはこれで保持
- bfcacheがなかった場合に行われる「キャッシュから再レンダリング」
- フォーカス位置は保持されない
- スクロール位置は保持される(レンダリング後に元の位置まで自動でスクロール)
- JavaScriptは再実行される
- キャッシュにない場合の「リロード」
- フォーカス位置は保持されない
- スクロール位置は保持されたり、されなかったりする
- JavaScriptは再実行される
1の時はフォーカスが当たってるからいいとして、問題は2と3。
このときにどうやってフォーカスを元に戻すか、です。
これを実現させるためには、どこにフォーカスがあたっていたかという情報をどこに記録しておくかが問題になりました。
ページの履歴に残るということで、前回はURLを書き換えるという方法をやってみましたが、あえなく撃沈。
その代替案として、クッキーに保存する方法がありますが・・・何をキーに保存するかが問題です。
URLだけをキーにすると、「戻る」と「同じキーワードでもう一回検索」した時の区別がつかないからです。
(その点URL書き換えだと「戻る」をした時しか値が取れないので確実だったんですが…)
結局、window.google.kEIの値(表示するごとにたぶんランダムなようなので)とURLをペアで使うようにしました。
こうすれば、キャッシュから表示するときはkEIが同じに、再度検索した時は別の値になるので区別ができるようになりました。
ただ、3のようにリロードされる場合はこれじゃダメ。
この時もkEIが変ってしまいます(試しにF5でリロードしてみると、フォーカスが外れます)
といっても8割ぐらいは1と2なのでこれだけでもあまり困らないと思います。
・・・といっても、バグなので対処せねば。
ただ、いい手が思い浮かばないので当分はほかの機能の実装を先にやろうと思っています。
早く完成させて広めたいなぁ・・・