monolog

スタック・オーバーフロー・エンジニアのなかにしゆうが思うことを書いていきます。

タブブラウザの操作性に対する5つのルール

みなさん、タブブラウザつかってますか? ぼくはタブブラウザの挙動について、慣れとか好みじゃなくて、「考えていくとその結果こうなるしかない」という自分なりの結論を持っているのですが、世の中のタブブラウザではあまりそのように実装されていません。 Firefox はカスタマイズの幅が広いため、なんとか思うように動かすことが可能だというイメージです。他の人の意見も聞けたら面白いなーと思って書いてみることにします。

ルール1 リンクを新しいタブで開く場合は、自動でアクティブにしない

ルール2 アクティブなタブを閉じたら、すぐ左のタブをアクティブにする

ルール3 新規タブはアクティブなタブのすぐ右に開く

まずこの3つのルールはセットです。なぜなら、

「Google検索し、結果の中で気になるページを複数連続して新しいタブで開くことがあるから」

です。

  1. 1つのページを開く
  2. 読み込みを待つ
  3. 求めている結果じゃなかった!
  4. 「戻る」ボタンを(場合によっては複数回)押して検索結果に戻る
  5. さっき開いたリンクの次のリンクを見つける
  6. 1に戻る

という動作を繰り返すのは非効率的です。なので、「最終的に訪問したくなる可能性のあるページ」をまとめてバックグラウンドのタブで開いておいてしまいます。こうすることでページの読み込み時間を削減でき、行ったり来たりの動作も減らすことができます。連続して新しいタブで開きたいため、新しいタブで開いた瞬間にタブをアクティブにされては困ります(ルール1)。

f:id:youcune:20160325150925p:plain

次に、複数枚のタブを開いたときに、求めている結果ではなかったという場合について考えてみます。タブを閉じたら、複数開いておいた別のページが開き、すべて閉じきった場合には検索結果ページを表示してほしいです(おそらく次の行動としては他のページを見るかキーワードを考えなおすため)。この動作を実現するためには、タブを閉じたときに「最後に開いていたタブ」が開いては困ります。この動作を実現するためには2つの方法があります。

  1. 新規タブはアクティブなタブのすぐ右に開き、アクティブなタブを閉じたら、すぐ左のタブをアクティブにする(ルール2・3)
  2. 新規タブはアクティブなタブのすぐ左に開き、アクティブなタブを閉じたら、すぐ右のタブをアクティブにする

このどちらかの動作であればよいことになります。ここだけ好みになってしまうのですが、「新規タブが左にできるのキモい」という理由で1の動作にしています。

f:id:youcune:20160325150926p:plain

ルール4 履歴がないとき「戻る」操作をしたらタブを閉じる

そうそう、検索に限らず新しいタブで開くことって結構多いですよね。新しく開いたタブで「戻る」操作をしたときに、「新しく開いたタブで履歴がないので戻れない」は一見正しい動作に見えます。しかし、ぼくからすると「さっき見てたページが見たい」わけで、「新しいタブで開いたかどうかにかかわらず」同じ動作でさっき見てたページが見れるべきです。「さっき見てたページに戻りたいな。戻る、あれ、戻れない。じゃあ閉じる」とか「さっき見てたページに戻りたいな。このページは新しいタブで開いたんだっけ? あ、そうだな、じゃあタブを閉じよう」とかやってらんないわけです。

そこで、履歴がないときに「戻る」操作をしたらタブを閉じるようにします(ルール4)。

ルール5 履歴がないとき「進む」操作をしたら最後に閉じたタブを復元する

上記の操作で元のページに戻ったとき、「進む」をしたときには元のページに戻ったことをやり直したいわけです。したがって、「進む」の場合は閉じたタブを復元します。

(おまけ)どうカスタマイズしているのか

Firefox でしかたぶん上記のこだわりは実現できません。ルール1~3については長らく Tab Mix Plus をつかっています。4, 5についてはぼくはマウス派なのでマウスジェスチャでやっています。自分で Javascript を実装してカスタムできるのは FireGestures です。

カスタムスクリプトについて、 元の記事 が404になってしまっているので下記に引用させていただきます。

[Hybrid] Back / Close Tab

if(gBrowser.sessionHistory.index>0) gBrowser.goBack();
else gBrowser.removeCurrentTab();

[Hybrid] Forward / Undo Close Tab

if(gBrowser.sessionHistory.index==gBrowser.sessionHistory.count-1) document.getElementById("History:UndoCloseTab").doCommand();
else gBrowser.goForward();