Firefox Quantum コンテキストメニュー編集の代替え

Firefox Quantum(57以上)で使用不可になったMenu Wizardの代替えについて考えます。残念ながら、WebExtensions(Firefox 57+用のAPI)では、コンテキストメニュー編集系アドオンの作成はできないため、自分なりに代替えしてみました。

実現方法

これまでは、Menu Wizardを使用してコンテキストメニュー編集していました。ですが、よく考えるとコンテキストメニュー(右クリックメニュー)の削除しかしていませんでした。なので、userChrome.cssを編集して、FirefoxのUIを直接変更することで実現します。

実現結果

変更前

変更前

変更後

変更後

userChrome.cssへの追加コード

先頭の/*を追加/削除することでメニューの表示/非表示を制御出来ます。お好みで変更してください。先頭の/*を追加すると表示で、削除すると非表示です。

※全角文字を含む場合(拡張機能用の[スクリーンショットを撮る]を指定する場合)、@charsetの指定が必要になります。また、userChrome.cssファイルを指定した文字コードで保存してください。

/* ファイルの文字コードを設定 */
@charset "UTF-8";

/* コンテキストメニューを削除 */
/* see https://www.bugbugnow.net/2017/12/firefox-quantum-57.html */
/*  #mainPopupSet,                      /* ポップアップ */
/*    #tabContextMenu,                  /* タブコンテキストメニュー */
        #context_reloadTab,             /* [タブを再読み込み] */
        #context_reloadSelectedTabs,    /* [タブを再読み込み] */
        #context_toggleMuteTab,         /* [タブをミュート] */
        #context_toggleMuteSelectedTabs,/* [タブをミュート] */
/*      #context_pinTab,                /* [タブをピン留め] */
/*      #context_unpinTab,              /* [タブのピン留めを外す] */
/*      #context_pinSelectedTabs,       /* [タブをピン留め] */
/*      #context_unpinSelectedTabs,     /* [タブのピン留めを外す] */
/*      #context_duplicateTab,          /* [タブを複製] */
/*      #context_duplicateTabs,         /* [タブを複製] */
/*      #context_duplicateTabs + menuseparator,        /* [区切り] */
        #context_selectAllTabs,         /* [すべてのタブを選択] */
        #context_bookmarkSelectedTabs,  /* [タブをブックマーク...] */
        #context_bookmarkTab,           /* [タブをブックマーク] */
        #context_reopenInContainer,     /* [コンテナーを開きなおす] */
        #context_moveTabOptions,        /* [タブを移動] */
        #moveTabOptionsMenu,            /* タブ移動 */
          #context_moveToStart,         /* [最初のタブへ移動] */
          #context_moveToEnd,           /* [最後のタブへ移動] */
          #context_openTabInWindow,     /* [新しいウィンドウへ移動] */
        #context_sendTabToDevice,       /* [タブを端末へ送信] */
        #context_sendTabToDevice + menuseparator,       /* [区切り] */
        #context_reloadAllTabs,         /* [すべてのタブを再読み込み] */
        #context_bookmarkAllTabs,       /* [すべてのタブをブックマーク...] */
/*      #context_closeTabsToTheEnd,     /* [右側のタブをすべて閉じる] */
/*      #context_closeOtherTabs,        /* [他のタブをすべて閉じる] */
/*      #context_closeOtherTabs + menuseparator,        /* [区切り] */
/*      #context_undoCloseTab,          /* [閉じたタブを元に戻す] */
        #context_closeTab,              /* [タブを閉じる] */
        #context_closeSelectedTabs,     /* [タブを閉じる] */
/*      #context_closeSelectedTabs + menuseparator,     /* [区切り] */
/*    #contentAreaContextMenu,          /* コンテキストメニュー */
/*      #context-navigation,            /* [ナビゲート] */
/*        #context-back,                /* [戻る] */
/*        #context-forward,             /* [進む] */
/*        #context-reload,              /* [更新] */
/*        #context-stop,                /* [停止] */
/*        #context-bookmarkpage,        /* [ブックマーク] */
/*      #context-sep-navigation,        /* [区切り] */
        #page-menu-separator,           /* [区切り] */
/*      #spell-no-suggestions,          /* [(修正候補がありません)] */
/*      #spell-add-to-dictionary,       /* [辞書に追加] */
/*      #spell-undo-add-to-dictionary,  /* [辞書への追加を元に戻す] */
/*      #spell-suggestions-separator,   /* [区切り] */
        #context-openlinkincurrent,     /* [選択した URL を開く] */
        #context-openlinkincontainertab,/* [Open Link in New Personal Tab] */
        #context-openlinkintab,         /* [リンクを新しいタブで開く] */
        #context-openlinkinusercontext-menu,    /* [リンクを新しいコンテナータブで開く] */
        #context-openlink,              /* [リンクを新しいウィンドウで開く] */
        #context-openlinkprivate,       /* [リンクを新しいプライベートウィンドウで開く] */
        #context-sep-open,              /* [区切り] */
        #context-bookmarklink,          /* [このリンクをブックマーク] */
/*      #context-savelink,              /* [名前を付けてリンク先を保存...] */
        #context-savelinktopocket,      /* [リンクを Pocket に保存] */
        #context-sendlink,              /* ※[リンクのURLをメールで送信] */
        #context-copyemail,             /* [メールアドレスをコピー] */
/*      #context-copylink,              /* [リンクの URL をコピー] */
/*      #context-sep-copylink,          /* [区切り] */
/*      #context-media-play,            /* [再生] */
/*      #context-media-pause,           /* [一時停止] */
/*      #context-media-mute,            /* [ミュート] */
/*      #context-media-unmute,          /* [ミュート解除] */
/*      #context-media-playbackrate,    /* [再生スピード] */
/*      #context-media-loop,            /* [連続再生] */
/*      #context-media-showcontrols,    /* [コントロールを表示] */
/*      #context-media-hidecontrols,    /* [コントロールを隠す] */
        #context-video-fullscreen,      /* [全画面表示] */
        #context-leave-dom-fullscreen,  /* [全画面表示モードを終了] */
        #context-media-sep-commands,    /* [区切り] */
        #context-reloadimage,           /* [画像を再読み込み] */
        #context-viewimage,             /* [画像だけを表示] */
        #context-viewvideo,             /* [動画だけを表示] */
        #context-copyimage-contents,    /* [画像をコピー] */
/*      #context-copyimage,             /* [画像の URL をコピー] */
/*      #context-copyvideourl,          /* [動画の URL をコピー] */
/*      #context-copyaudiourl,          /* [音声の URL をコピー] */
/*      #context-sep-copyimage,         /* [区切り] */
/*      #context-saveimage,             /* [名前を付けて画像を保存...] */
        #context-sendimage,             /* [画像の URL をメールで送信...] */
        #context-setDesktopBackground,  /* [デスクトップの背景に設定...] */
        #context-blockimage,            /* ※[画像をブロックする] */
/*      #context-viewimageinfo,         /* [画像の情報を表示] */
/*      #context-viewimagedesc,         /* [画像の詳細情報を表示] */
/*      #context-savevideo,             /* [名前を付けて動画を保存...] */
/*      #context-saveaudio,             /* [名前を付けてオーディオを保存...] */
/*      #context-video-saveimage,       /* [スナップショットを保存...] */
        #context-sendvideo,             /* [動画の URL をメールで送信...] */
        #context-sendaudio,             /* [音声の URL をメールで送信...] */
/*      #context-ctp-play,              /* [このプラグインを有効化] */
/*      #context-ctp-hide,              /* [このプラグインを非表示] */
/*      #context-sep-ctp,               /* [区切り] */
        #context-savepage,              /* [名前を付けてページを保存...] */
        #context-pocket,                /* [ページを Pocket に保存] */
        #context-sep-sendpagetodevice,  /* [区切り] */
        #context-sendpagetodevice,      /* [ページを端末へ送信] */
        #context-sendpage,              /* ※[ページのURLをメールで送信] */
        #context-sep-viewbgimage,       /* [区切り] */
        #context-viewbgimage,           /* [背景画像だけを表示] */
/*      #context-undo,                  /* [元に戻す] */
/*      #context-sep-undo,              /* [区切り] */
/*      #context-cut,                   /* [切り取り] */
/*      #context-copy,                  /* [コピー] */
/*      #context-paste,                 /* [貼り付け] */
/*      #context-delete,                /* [削除] */
/*      #context-sep-paste,             /* [区切り] */
/*      #context-selectall,             /* [すべて選択] */
/*      #context-sep-selectall,         /* [区切り] */
        #context-keywordfield,          /* [この検索にキーワードを設定...] */
/*      #context-searchselect,          /* [[-をweb検索]] */
        #context-sep-sendlinktodevice,  /* [区切り] */
        #context-sendlinktodevice,      /* [リンクを端末へ送信] */
/*      #frame-sep,                     /* [区切り] */
/*      #frame,                         /* [このフレーム] */
/*      #context-viewpartialsource-selection,   /* [選択した部分のソースを表示] */
/*      #context-viewpartialsource-mathml,      /* [MathML のソースを表示] */
/*      #context-sep-viewsource,        /* [区切り] */
/*      #context-viewsource,            /* [ページのソースを表示] */
/*      #context-viewinfo,              /* [ページの情報を表示] */
/*      #context-metadata,              /* ※[プロパティを表示する] */
/*      #spell-separator,               /* [区切り] */
/*      #spell-check-enabled,           /* [スペルチェックを行う] */
/*      #spell-add-dictionaries-main,   /* [辞書を追加...] */
/*      #spell-dictionaries,            /* [言語] */
/*      #context-spell-check-enabled,   /* ※[スペルチェックを有効にするチェックボックス] */
/*      #context-sep-bidi,              /* [区切り] */
/*      #context-bidi-text-direction-toggle,    /* [テキストの記述方向を切り替える] */
/*      #context-bidi-page-direction-toggle,    /* [ページの記述方向を切り替える] */
/*      #fill-login-separator,          /* [区切り] */
/*      #fill-login,                    /* [ログイン情報を入力] */
/*      #inspect-separator,             /* [区切り] */
/*      #context-inspect,               /* [要素を調査] */
/*      #context-inspect-a11y,          /* [アクセシビリティプロパティを調査] */
/*      #context-media-eme-separator,   /* [区切り] */
/*      #context-media-eme-learnmore,   /* [DRM の詳細...] */
/*    #placesContext,                   /* ブックマークメニュー */
/*      #placesContext_open,            /* [開く] */
/*      #placesContext_open\:newtab,    /* [新しいタブで開く] */
/*      #placesContext_openContainer\:tabs,     /* [タブですべて開く] */
/*      #placesContext_openLinks\:tabs,         /* [タブですべて開く] */
/*      #placesContext_open\:newwindow,         /* [新しいウィンドウで開く] */
/*      #placesContext_open\:newprivatewindow,  /* [新しいプライベートウィンドウで開く] */
/*      #placesContext_openSeparator,   /* [区切り] */
/*      #placesContext_new\:bookmark,   /* [新しいブックマーク...] */
/*      #placesContext_new\:folder,     /* [新しいフォルダー...] */
/*      #placesContext_new\:separator,  /* [新しい区切り] */
/*      #placesContext_newSeparator,    /* [区切り] */
/*      #placesContext_createBookmark,  /* [ページをブックマークに追加] */
/*      #placesContext_cut,             /* [切り取り] */
/*      #placesContext_copy,            /* [コピー] */
/*      #placesContext_paste,           /* [貼り付け] */
/*      #placesContext_editSeparator,   /* [区切り] */
/*      #placesContext_delete,          /* [削除] */
/*      #placesContext_delete_history,  /* [ページを削除] */
/*      #placesContext_deleteHost,      /* [このサイトの履歴を消去] */
/*      #placesContext_deleteSeparator, /* [区切り] */
/*      #placesContext_sortBy\:name,    /* [名前順に並べ替える] */
/*      #placesContext_reload,          /* [ライブブックマークを再読み込み] */
/*      #placesContext_show\:info,      /* [プロパティ] */
    #context-dummy-dummy-dummy          /* ダミー */
{
  display: none !important;
}

/* 「…で検索: "…"」を削除 */
/* リンクを右クリックした場合、削除する。 */ 
/* 選択中のテキストがある場合、削除しない。 */ 
        #context-copylink:not([hidden]) ~ #context-copy[hidden] ~ #context-searchselect, /**/
    #context-dummy-dummy-dummy          /* ダミー */
{
  visibility: collapse !important;
} 

/* コンテキストメニューを削除(拡張機能用) */
/* @charsetとuserChrome.cssの文字コードに注意 */
    menuitem[label="Take a Screenshot"],        /* スクリーンショットを撮る */
    menuitem[label="スクリーンショットを撮る"], /* スクリーンショットを撮る */
/*  menuitem[label="NoScript"],                 /* NoScript */
    #context-dummy-dummy-dummy                  /* ダミー */
{
  display: none !important;
}

変更履歴

更新日 内容
2017/12/27 初版
2018/02/25 #context-sep-sendlinktodeviceを非表示で追記
リンクの区切りが2重になる問題を修正
2018/02/25 idなしの[区切り]を隣接セレクタを使用して追加
2018/03/04 @charsetを追加
2018/03/04 拡張機能のコンテキストメニュー削除を追加
ラベル名が判明している場合、同様の方法で削除可能
2018/03/07 ブックマークメニューを追加
2018/03/07 ブックマークの[タブですべて開く]を非表示で追加
ブックマークメニューの[タブですべて開く]は表示のままとする
2018/04/14 [Take a Screenshot]を非表示で追加
国際化対策のため
2018/04/18 [[-をweb検索]]の削除を追加
テキスト選択時は削除しない
2018/04/19 ブックマークを別ページへ移動
Firefox userChrome.cssのコードまとめ
2018/04/19 連続再生を表示で追加
漏れていたため
2018/04/19 タブですべて開くを表示で追加
漏れていたため
2018/04/19 以下の範囲のラベルがズレていたため修正
#context-sep-copylink,
...
#context-media-playbackrate,
2018/04/20 Added English version article.
Firefox Quantum context menu editing
2018/08/14 下記の項目を追加
#context-sendlink, #context-blockimage, #context-sendpage, #context-metadata, #context-spell-check-enabled,
ただし、筆者の環境では未確認の項目です。
Menus - Mozilla | MDN に記載があるため、追加する。
2018/12/12 Firefox64対応
Select All Tabs, タブをブックマーク..., Bookmark Tab, コンテナーを開きなおす, Move Tabを非表示で追加
2019/01/17 Firefox64対応、翻訳漏れを翻訳文字列に変更
2019/06/30 Firefox67対応
2020/01/18 #context_toggleMuteSelectedTabs 直下のセパレーターを削除(なくなっていたため)
2020/01/18 #context_closeSelectedTabs 直下のセパレーターを追加(漏れ)

備考

参考