タブを移動したときにフォーカスが意図しない場所に戻ってしまう。
具体的には以下のことを行うと、フォーカスが検索バーに行ってしまう。
前提条件として、
・検索バーから検索したときに新しいウィンドウが開くようにする(Tab Mix Plusを使用)。
この状態で、検索バーから検索をすると、検索結果が新しいタブに開く。
開いたタブから元のタブに戻ると、フォーカスが検索バーにある(ここが困る)。
どのように困るかというと、keyconfigを使って「Ctrl + ←、→」でタブの移動を
割り当てていると、フォーカスが検索バーに行ってしまうことによって、それ以降の
タブの移動が効かなくなる点が困る。
コンテンツにフォーカスを合わせるためのkeyconfigの設定は以下のページで紹介されている。
silog - memo/firefox/keyconfig
http://white.s151.xrea.com/wiki/index.php?memo%2Ffirefox%2Fkeyconfig
これでもいいのだけど、わざわざキーを押すのが面倒なわけで。。。
ということで、最初はFirefoxのソースコード自体を弄ってやろうかと思ったけど、
それは断念して、userChrome.jsを使って対応することにした。
userChrome.jsについては、以下のページを見るとわかる。
userChrome.js - Mozilla Firefox まとめサイト
http://firefox.geckodev.org/index.php?cmd=read&page=userChrome.js&word=user
概要によると、
JavaScriptを通して、Firefoxのインターフェイスを簡単に改造するための拡張です。
ということらしい。
感覚的には、GreaseMonkeyをChrome特権(Firefox本体と同じ権限)で動かした感じなのかな。
適当に導入して、ユーザスクリプトとして以下のスクリプトを入れる。
// ==UserScript==
// @name auto focus content
// @namespace http://yasuharu.net
// @include chrome://browser/content/browser.xul
// ==/UserScript==
function focus_content(event)
{
setTimeout(function(){ gBrowser.selectedTab.linkedBrowser.contentWindow.focus() } , 0);
}
(function()
{
gBrowser.tabContainer.addEventListener("TabSelect", focus_content, false);
})();
これで、期待通りの動作をさせることができた。
まぁ、何でこれが必要かというと、Sleipnirの時の動作をまねたかったわけです。
Sleipnirの時は、タブを切り替えてもフォーカスは、検索バーに行くことは無かった。