Firefox Quantum マウスジェスチャ機能の代替

Firefox Quantum (57以上) で使用不可になった 「FireGestures」の代替を考える。

やりたいこと

  • ロッカージェスチャでタブを閉じる/閉じたタブを開く
  • ホイールジェスチャで先頭/末尾へスクロール
  • 以上(他のジェスチャ機能は使わない)
  • できれば、オプション画面やアドオンサイトで動作する

※ ロッカージェスチャ(マウスの右ボタンを押しながら左ボタンを押す、またはマウスの左ボタンを押しながら右ボタンを押す)
※ ホイールジェスチャ(マウスの右ボタンを押しながらホイールを上/下へ回転する)

これまでの経緯

  1. Firefox57から「FireGestures」が使用不可となる
  2. Foxy Gestures」を使用する
    • Add-onsページ等でジェスチャが効かない
  3. userChrome.jsで実現 ←いまここ

実現方法

userChrome.jsの「MouseGestures2.uc.js」を編集して使用する。

※「MouseGestures2.uc.js」は、「FireGestures」の作者である「Gomita」さんが作成したユーザスクリプトのようです。
 お世話なっておりますm(_ _)m
※MouseGestures.uc.jsは、ネット上に大量の派生物が存在します。本uc.jsの選定理由は、発見した中でソースコード量が少なく理解が容易だったため、採用しました。

やったこと

上記を参考にイベント処理部分のみを修正する。

MouseGestures2.uc.js修正部分のみ  _performAction: function(event)
  {
    // These are the mouse gesture mappings. Customize this as you like.
    switch (this._directionChain) {
      // 閉じたタブを開く
      case "L<R": document.getElementById("History:UndoCloseTab").doCommand(); break;
      // タブを閉じる
      case "L>R": document.getElementById("cmd_close").doCommand(); break;
      // 先頭へスクロール
      case "W-": goDoCommand("cmd_scrollTop"); break;
      // 末尾へスクロール
      case "W+": goDoCommand("cmd_scrollBottom"); break;
      // Unknown Gesture
      default: throw "Unknown Gesture: " + this._directionChain;
    }
  }

userChrome.jsの導入方法は、「userChrome.js用スクリプト 」のFirefox57以降でuserChrome.js用スクリプトを利用する方法を参考にしてください。

Firefox61対応

Firefox61で「MouseGestures2.uc.js」が動作しなくなったため、一部修正して対応する。ソースコードのライセンスが不明のため、uc.jsのソースコードではなく、変更点のみを記載する。

下記の記述を置き換える。

  • gBrowser.mPanelContainergBrowser.tabpanels
  • XULBrowserWindow.statusTextField.labelStatusPanel._label

_performAction関数の末尾でthis._directionChainをクリアする。(2重実行を防止のため)

    _performAction: function(event)
    {
      switch (this._directionChain) {
      ...
      }
      this._directionChain = "";
    }