Firefoxの多段タブ・多段ブックマークツールバー【152・153・154】

過去記事のFirefoxのuserChrome.css関係の記事を最初に書いてから5年経過し、その間Firefox本体も何度もバージョンアップしていて、その都度必要に応じてuserChrome.cssの修正やその他諸々差し替え・修正してきました。

 

この記事を最初に書いた時点ではバージョン119です。
バージョン152・153・154でも、多段タブ・多段ブックマークツールバー・サイドバーの自動開閉に関して基本的には「ほぼ」正常に動いています。

 

■Firefoxについて■
2026.6.18時点で

  • Firefox(デスクトップ版):バージョン152.0
  • Firefox Portable:バージョン152.0
  • Firefox Developer Edition:バージョン153.0b1
  • Firefox Nightly:バージョン154.0a1 (2026-06-17)

ですが、「ほぼ」問題なく動いています。

 

 

■注意■
・多段タブではないデフォルトのFirefoxと比べて、当サイトの MultiRowTabLiteforFx.uc.js では機能してない機能が1つあります。

 

■機能してない
タブ移動時のドラッグ・アンド・ドロップによるタブグループ操作は機能していません。
右クリックからのタブグループ操作は可能です。

タブグループに関しては通常ウィンドウ・プライベートウィンドウともに、

  • 右クリックからのタブグループ操作は機能している
  • ドラッグ・アンド・ドロップによるタブグループ操作はできていない

という状況です。

 

バージョン145でタブのドラッグ・アンド・ドロップの仕様変更があり、多段タブ関係を有効のままタブのドラッグ・アンド・ドロップによるタブグループ操作に関して、しばらく色々頑張ったものの解決できませんでした、すみません。

 

 

■2026.3.5追記■
当サイトの

  • MultiRowTabLiteforFx.uc.js
  • userChrome.css

を大幅に見直しました。

 

最終的に、上記「タブ移動時のドラッグ・アンド・ドロップによるタブグループ操作」に関しては解決してない・今後も放置という結論になりました。

 

また、

以前の多段タブ.zipと比べて、削除した機能が1つあります。

■削除した機能・・・ピン留めタブの位置(分離表示)の設定
ピン留めタブをタブの行から分離して上に出来る行へ移動する設定に関して、(修正をしていませんので)機能していません。

 

そもそもスペースを確保したい目的がメインでピン留めしてるはずなので、(この機能自体があまり意味がない & 修正するのがかなり困難と判断し)当サイトの MultiRowTabLiteforFx.uc.js 内に残っていた関連コードを全て削除しました。

 

先日までここに記載してありました以下の2点は解決しました。

■【解決済み】元:「機能してない・その2」・・・多段タブの最大行数の設定

  • 「const MultiRowTab_OnOff_and_TabBar_Rows = -1;」の場合:多段タブOn 段数:無制限
  • 「const MultiRowTab_OnOff_and_TabBar_Rows = 0;」の場合:多段タブOff (1行のみ、左右スクロールバー有効)
  • 「const MultiRowTab_OnOff_and_TabBar_Rows = 1;」の場合:多段タブOn (通常は1段、マウスオーバーで最大 TabBar_Rows_on_MouseOverで指定した段数まで展開)
    ※「const TabBar_Rows_on_MouseOver = 30;」としてあります。
  • 「const MultiRowTab_OnOff_and_TabBar_Rows = 2〜;」の場合:多段タブOn (指定した段数まで表示、上下スクロールバー有効)

となっています。

■【解決済み】元:「機能してない・その4」・・・タブをドラッグ&ドロップして移動する際に表示するインジケーターの設定

  • 「const Tab_Drop_Indicator = false;」でデフォルトの青いピンのインジケーター
  • 「const Tab_Drop_Indicator = true;」で赤いピンのインジケーター

となります。

 

■注意■
Tab_Drop_Indicatorの値が「true」「false」どちらの場合もFirefox起動直後〜30秒経過するくらいまでは、タブを移動しようとすると(少しの間)右下に余計な黒い縦線が表示されます。

 

これはおそらくFirefox本体の挙動で(たぶん私には)修正不可です。
※「Firefox起動直後〜30秒経過」以降は右下に余計な黒い縦線は表示されません。

バージョン148で導入される新機能「分割ビュー(Split View)」は、about:configで

  • browser.tabs.splitView.enabled:true ※バージョン147の時点ではデフォルトはfalse、バージョン149でデフォルトでtrueになる予定らしいです。

にすると新機能「タブの分割ビュー」が有効になり、タブを右クリックすると
 ・分割ビューを追加

分割ビューを追加

で1つのタブ内で2つのタブを開くことができます。

 

Firefoxの分割ビュー

 

タブの分割ビュー内の2つのタブのどちらかのタブを右クリックすると
 ・分割ビューを終了
とあり、これをクリックすると分割ビューを終了して普通の2つのタブに戻ります。

 

 

なお、分割ビューはバージョン148から正式対応です。

バージョン147でも分割ビューを有効化できますが、バージョン147では分割ビューの横幅や挙動がかなりおかしいです。

 

「■4.22 追記」の時点で
コンテキストメニューのON/OFFを整理・変更しました。
後述の 「■コンテキストメニュー変更について」をお読みください。

 

また、バージョン150以降では、「リンクを新しいタブで開く」が表示されない場合がありますのでご注意ください。

 

せっかく整理したこのページもまたゴチャゴチャになってきました。
これもバージョン更新のたびに多段タブを使えなくするFirefox開発チームが悪(ry

 

諸々の説明が必要ない場合は、各ファイルのダウンロードの箇所に飛んでください。
ただし、1度くらいはこのページの全てを読んでおくことをオススメします。

   

以下、Firefoxの多段タブ・多段ブックマークツールバー・サイドバーの自動開閉の説明です。

 

Firefoxの多段タブ・多段ブックマークツールバー

 

●追加した、ほにゃらら.uc.jsの一覧
AboutAddonsPlus●改●.uc.js
AddonsPage_fx72.uc.js
Firefox_ToolBarButtons.uc.js
MouseGestures2_e10s.uc.js
MouseGestures2_e10s_menus.uc.js
MultiRowTabLiteforFx.uc.js
OpenWith_1.2.1c.uc.js●改●.uc.js
showScrollbarInMenus.uc.js
tabLock_mod2.uc.js
tabProtect_mod2.uc.js
toggle-findbar.uc.js
zzzz-tabContextMenu_combining_tabProtect_and_tabLock.uc.js
タブをダブルクリックでリロードv2●改●.uc.js

 

上記ほにゃらら.uc.js一式およびuserChrome.css等により、
タブを下にする
多段タブ
タブの既読・未読の色やマウスオーバーした時の色・挙動を自分好みに変更
タブロック
タブプロテクト
タブロック&タブプロテクト
多段ブックマークツールバー(MAX30段(変更できる)/縦のスクロールバーなし/フェードインなし)
ブックマークのアイコンの色を変更
自動開閉のサイドバー
再起動ボタン
不要なコンテキストメニューを非表示
アドレスバーを拡大しない
ツールバーボタンをいくつか追加
『Ctrl+F』で検索バーの表示切り替え
タブをダブルクリックでリロード

が有効になっています。

 

多段タブの説明をする前に

多段タブの諸々を説明する前に、サイドバーについて少し説明します。

 

マウスオーバーで自動開閉するサイドバー

サイドバーはアドオンのTree Style Tab - ツリー型タブを使用しつつ、サイドバーの挙動・幅・色を少し変更してあります。

 

①閉じた状態のサイドバー(縦に棒状・横幅36px)を常時表示していて、
※Firefoxのメニューの、表示 → サイドバー → ツリー型タブをチェックON

①閉じた状態のサイドバー(縦に棒状・横幅36px)を常時表示

 

②閉じた状態のサイドバーに0.5秒マウスオーバーでサイドバーの中身が開きます。

②閉じた状態のサイドバーに0.5秒マウスオーバーでサイドバーの中身が開く

 

上記画像のサイドバーで、

  • 下から3番目がアクティブタブ(背景:青色)
  • 1番下がマウスオーバー(背景:灰色)

の状態です。

 

開いたサイドバーは横幅300pxで固定してあります。

マウスオーバーをやめると①の状態に戻ります。

 

今気づきましたが、②の画像を見れば分かる通り、

  • サイドバー内のアクティブタブの背景は青色
  • サイドバー内のタブにマウスオーバーした時の背景は灰色

という感じで、後述の『タブの色について、とか』と違います。。。

 

私はあまりサイドバーは使ってないので気にしませんが、気になる方は『Tree Style Tab』のオプションあるいは userChrome.css にて調整してください。

 

調整したけど背景黄色だと見づらくて青色にしたような気もします><

 

サイドバーの「Tree Style Tab - ツリー型タブ」の配色はuserChrome.cssに記載してありますが、それとは別に、
私の場合「Tree Style Tab - ツリー型タブ」のオプションの下のほうにある「ユーザースタイルシート」にて、

/* Show title of unread tabs with red and italic font */
/*
:root.sidebar tab-item.unread .label-content {
  color: red !important;
  font-style: italic !important;
}
*/

/* Add private browsing indicator per tab */
/*
:root.sidebar tab-item.private-browsing tab-label:before {
  content: "🕶";
}
*/

が記述してあるのですが、なんで記述したのかすでに覚えていません。
コメントアウトしてあるので効いてない・不要なんですが、一応残したままにしてあります。

 

多段タブの導入手順等

以下、多段タブを初めて導入する際の手順です。
必要ない場合は、各ファイルのダウンロードの箇所に飛んでください。

 

about:configで変更したもの(メモが残っている範囲で)

about:config にて、toolkit.legacyUserProfileCustomizations.stylesheets をtrueにします。
※なければ新規作成します。

 

上記だけでOKなはずです。

 

その他変更した記録がメモに残っていたやつ※多段タブに関係なくて、私用の備忘録です。

browser.tabs.insertRelatedAfterCurrent を true

 

browser.tabs.closeWindowWithLastTab を false
browser.search.openintab を true

 

browser.tabs.loadBookmarksInTabs を true
browser.urlbar.autoFill を false
browser.cache.disk.smart_size.enabled を false

 

media.gpu-process-decoder を false
browser.urlbar.openintab を true

 

userChrome.css等各ファイルを用意する

https://github.com/alice0775/userChrome.js

から『Code』→『Download ZIP』にて

 

①config.js
②config-prefs.js
③userChrome.css
④userChrome.js
の4ファイルを用意します。

※使用しているFirefoxのバージョンに1番近い番号のフォルダに最新版が入っています、あるいは修正の必要がないファイルはフォルダ外にあります。

 

各ファイルの保存場所

それぞれのファイルの保存場所は

■Firefox(デスクトップ版)の場合
①Firefoxのインストールフォルダー内にconfig.js
例、C:\Program Files (x86)\Mozilla Firefox\config.js

 

②Firefoxのインストールフォルダー → 『defaults』 → 『pref』フォルダ内にconfig-prefs.js
例、C:\Program Files (x86)\Mozilla Firefox\defaults\pref\config-prefs.js

 

③④Firefoxのプロファイルフォルダー内※1に『chrome』フォルダーを作成し『chrome』フォルダー内にuserChrome.cssとuserChrome.js

 

例、
C:\Users\●ユーザー名●\AppData\Roaming\Mozilla\Firefox\Profiles\●プロファイル名●\chrome\userChrome.css

 

C:\Users\●ユーザー名●\AppData\Roaming\Mozilla\Firefox\Profiles\●プロファイル名●\chrome\userChrome.js

※1のプロファイルフォルダーは、
Firefoxのメニューバーにて、『ヘルプ』 → トラブルシューティング情報 → プロファイルの右にある『about:profiles』 → 『これは使用中のプロファイルです。削除できません。』 のルートディレクトリの右にある『フォルダを開く』

 

あるいは
Winキー + Rで、%appdata%\Mozilla\Firefox\Profiles\ と入力してエンター

 

でプロファイルフォルダが開けます。

 

■Firefox Portableの場合(例、インストールフォルダがM:の場合)
①Firefox Portableのインストールフォルダー → 『App』 → 『Firefox』のフォルダ内にconfig.js
例、M:\FirefoxPortable\App\Firefox\config.js

 

②Firefox Portableのインストールフォルダー → 『App』 → 『Firefox』 → 『defaults』 → 『pre』フォルダ内にconfig-prefs.js
および
Firefox Portableのインストールフォルダー → 『App』 → 『Firefox64』 → 『defaults』 → 『pre』フォルダ内にconfig-prefs.js

 

例、
M:\FirefoxPortable\App\Firefox\defaults\pref\config-prefs.js
および
M:\FirefoxPortable\App\Firefox64\defaults\pref\config-prefs.js

 

2箇所に入れるのはFirefox PortableはOSが32bitか64bitかを自動判定してどちらかのフォルダ内のFirefoxを起動するからです。

 

③④Firefox Portableのインストールフォルダー →『Data』 → 『profile』フォルダ内に『chrome』フォルダーを作成し『chrome』フォルダー内にuserChrome.cssとuserChrome.js

 

例、
M:\FirefoxPortable\Data\profile\chrome\userChrome.css
M:\FirefoxPortable\Data\profile\chrome\userChrome.js

 

■Waterfoxの場合
①C:\Program Files (x86)\Waterfox\config.js
②C:\Program Files (x86)\Waterfox\defaults\pref\config-prefs.js
③C:\Users\●ユーザー名●\AppData\Roaming\Mozilla\Waterfox\Profiles\●プロファイル名●\chrome\userChrome.css
④C:\Users\●ユーザー名●\AppData\Roaming\Mozilla\Waterfox\Profiles\●プロファイル名●\chrome\userChrome.js

 

各ファイルのダウンロード

Firefoxバージョン150にて userChrome.js の更新が必要なのでご注意ください。

alice0775様の所からダウンロードしてください。

https://github.com/alice0775/userChrome.js  

「■4.22 追記」の時点で
コンテキストメニューのON/OFFを整理・変更しました。
後述の 「■コンテキストメニュー変更について」をお読みください。

 

また、バージョン150以降では、「リンクを新しいタブで開く」が表示されない場合がありますのでご注意ください。

 

■注意■
バージョン150以降ではFirefox本体の仕様変更が増えており、従来の userChrome.css やカスタマイズが影響を受ける場合があります。
当サイトの各ファイルを適用する際は、必要に応じて元のファイルをバックアップしておくことをおすすめします。

 

私が使っているuserChrome.css と MultiRowTabLiteforFx.uc.js に関して、ダウンロードできるようにしておきました。

 

■2025.6.21 追記■

下記にある全てのuserChrome.cssには

  • tabLock_mod2.uc.js
  • tabProtect_mod2.uc.js

用のcss

/*●tabProtect_mod2.uc.jsのアイコンの位置●*/
tab[tabProtect] .tab-icon-protect{
  /*■元■margin-top: 0px;■*/ /*要調整*/
  margin-top: -8px !important;
  margin-left: 0px !important; /*要調整*/
}

/*●tabLock_mod2.uc.jsのアイコンの余白●*/
  tab[tabLock] .tab-icon-lock{
    margin-top: 0px !important; /*要調整*/
    margin-left: 0px !important; /*要調整*/
}

が追記してあります。

 
  • tabLock_mod2.uc.js
  • tabProtect_mod2.uc.js

を使ってない場合はそのまま放置しておいても特に問題ありません。

 

不要な方は削除してお使いください。
m(_ _)m

■2025.11.18 追記■
私は DWMBlurGlass でウィンドウのタイトルバーを透過しているのですが、Windows Updateにて11月の累積更新プログラム KB5068861適用後、Firefoxの右クリックのみ背景が透過されるようになりました。

正確に言えば、「背景透過の度合いが強くなった」が正しいです。

 
【DWMBlurGlass】Windows11のタイトルバーの透過を完璧にする
数日前にWindows Updateにて11月の累積更新プログラム KB5068861(セキュリティパッチ) をインストールしてパソコンを再起動したら、キーボード入力が完全におかしくなりました。文字入力が キーボード上部の数字は入力できない...

その対策の一環で userChrome.css の最後に

/* ●DWMBlurGlassを導入している場合、KB5068861適用以降、Firefoxだけ右クリックが透過される対策● */
menupopup {
  -moz-appearance: menupopup !important;
  background-color: -moz-Dialog !important;
  background-image: none !important;
  backdrop-filter: none !important;
  opacity: 0.8 !important;
}

を追記しました。

 

DWMBlurGlassを使ってない場合はそのまま放置しておいても特に問題ないと思いますが、気になる方は上記コードを削除してお使いください。
m(_ _)m

■新・フルセット(バージョン152以降用)
config.js & config-prefs.js & userChrome.css & userChrome.js & MultiRowTabLiteforFx.uc.js(バージョン152以降用)

■2026.6.18 追記■
ピン留めしたタブを後方に移動する際のバグを修正をしました。

 

■新・フルセット(バージョン150 ~ 151用)
config.js & config-prefs.js & userChrome.css & userChrome.js & MultiRowTabLiteforFx.uc.js(バージョン150 ~ 151用)

 

「■4.22 追記」の時点で
コンテキストメニューのON/OFFを整理・変更しました。
後述の 「■コンテキストメニュー変更について」をお読みください。

 

また、バージョン150以降では、「リンクを新しいタブで開く」が表示されない場合がありますのでご注意ください。

 

■注意■
タブ移動時のドラッグ・アンド・ドロップによるタブグループ操作は機能していません。
右クリックからのタブグループ操作は可能です。

 

■元・フルセット(バージョン150以降用)
config.js & config-prefs.js & userChrome.css & userChrome.js & MultiRowTabLiteforFx.uc.js(バージョン150以降用)

 

すぐ下の「フルセット(バージョン148・149用)」との違い

  • userChrome.js※バージョン150にてalice0775/userChrome.jsが更新
  • userChrome.css※後述の「■2026.4.22 追記■」の箇所にある「コンテキストメニューのON/OFF」を修正

の2つです。

 

■2026.4.23 追記■
後述の4.22 追記の件で更新した、userChrome.css内に記述してある「コンテキストメニューのON/OFF」のデフォルト設定がかなりクセがあるので、ご注意ください。

後でよく調査したところ、上記「コンテキストメニューのON/OFF」のデフォルト設定がクセがあるだけではなく、Firefoxバージョン150あたりで追加・変更されたコンテキストメニューがウザいのが諸悪の根源のような気がします。

 

コンテキストメニューのON/OFFを整理・変更しました。

詳細は、「■コンテキストメニュー変更について」 をお読みください。

 

■注意■
タブ移動時のドラッグ・アンド・ドロップによるタブグループ操作は機能していません。
右クリックからのタブグループ操作は可能です。

■フルセット(バージョン148・149用)
config.js & config-prefs.js & userChrome.css & userChrome.js & MultiRowTabLiteforFx.uc.js(バージョン148・149用)

※バージョン148未満で使っても(タブグループと分割ビュー以外は)問題なく動くことは確認しました。

 

■注意■
タブ移動時のドラッグ・アンド・ドロップによるタブグループ操作は機能していません。
右クリックからのタブグループ操作は可能です。

■フルセット(バージョン145 ~ 147)
config.js & config-prefs.js & userChrome.css & userChrome.js & MultiRowTabLiteforFx.uc.js(バージョン145~147用)

※バージョン144でも(タブグループ以外は)問題なく動くことは確認しました。

※この記事の冒頭の「2026.3.5追記」に記載の大幅な見直しは反映していません。

 

■注意■
タブ移動時のドラッグ・アンド・ドロップによるタブグループ操作は機能していません。
右クリックからのタブグループ操作は可能です。

 

各ファイルを個別にDLしたい方は、以下の各ファイルをDLしてお使いください。

 

■userChrome.css(全バージョン用)

userChrome.cssのみ(全バージョン用)

 

「■4.22 追記」の時点で
コンテキストメニューのON/OFFを整理・変更しました。

 

■コンテキストメニュー変更について

「■2026.4.22 追記■」「■2026.4.23 追記■」「■2026.4.29 追記■」の3つ追記があります。

 

以下、さらにゴチャゴチャして申し訳ありません。
m(_ _)m

 

ウザいので、以下の3つ追記はいつか削除するかもです。

 

■2026.4.22 追記■
かなり昔から私のuserChrome.css内に追加してあった「コンテキストメニューのON/OFF」の設定に関して、元サイト

Firefox のコンテキストメニューを編集する
Firefox57 以降、旧アドオン廃止により使用できなくなった Menu Wizard の代替えについて考えます。残念ながら、 WebExtensions API では、コンテキストメニュー編集の拡張機能を作成できないため、自分なりに代替...

が色々更新されていたので、それを元にuserChrome.css内の該当箇所を差し替えました。

 

■2026.4.23 追記■
後述の4.22 追記の件で更新した、userChrome.css内に記述してある「コンテキストメニューのON/OFF」のデフォルト設定がかなりクセがあるので、ご注意ください。

後でよく調査したところ、上記「コンテキストメニューのON/OFF」のデフォルト設定がクセがあるだけではなく、Firefoxバージョン150あたりで追加・変更されたコンテキストメニューがウザいのが諸悪の根源のような気がします。

 

ザックリと確認してON/OFFを調整しましたが、各自必要・不要なコンテキストメニューは違うはずなので、userChrome.css内の「●コンテキストメニュー●」以降にある設定箇所をご確認の上、ON/OFFを調整してお使いください。
m(_ _)m

 

全てデフォルトのコンテキストメニューに戻したい場合は

  • 「●コンテキストメニュー●」の箇所の全ての設定箇所の冒頭に「/*」を記述する
  • 「●コンテキストメニュー●」の箇所全てを削除する

のどちらかでデフォルトに戻ります。

 

以下の 「■2026.4.29 追記■元に戻す場合」 もお読みください。
「■2026.4.29 追記■元に戻す場合」をクリック・タップすると開きます。
m(_ _)m

 

■コンテキストメニューを元に戻す場合

「各ファイルのダウンロード」の箇所でダウンロードできる

の userChrome.css の違いは、

  • 「コンテキストメニューのON/OFF」に関する修正

のみです。

 

以前から当サイトの userChrome.css をお使いで、Firefoxバージョン150への更新後に「右クリックメニューが以前と違うので戻したい」という場合は、すぐ下にある

を適用すれば、従来の表示に戻ると思います。

 

ただし、バージョン150以降では、「リンクを新しいタブで開く」が表示されない場合がありますのでご注意ください。

 

また、先ほど書きましたが

全てデフォルトのコンテキストメニューに戻したい場合は

  • 「●コンテキストメニュー●」の箇所の全ての設定箇所の冒頭に「/*」を記述する
  • 「●コンテキストメニュー●」の箇所全てを削除する

のどちらかでデフォルトに戻ります。

 

なお、Firefoxバージョン150ではデフォルトのコンテキストメニュー自体が少し追加・変更されていますので、当サイトの userChrome.css のコンテキストメニュー部分も、今後必要に応じて調整する可能性があります。
※現時点ではコンテキストメニュー部分のコードを変更・修正する予定はありません。

 

以上、少し分かりづらい部分もあるかと思いますが、ご理解いただければ幸いです。

 

新旧・コンテキストメニュー

以下、バージョン150時点での、文字・リンク・画像のコンテキストメニューの新旧(私のFirefox & たぶん全てデフォルトのFirefox)です。
参考にどうぞ。

 

■文字のコンテキストメニュー

※画像クリックで拡大表示できます。

文字のコンテキストメニュー

 

■リンクのコンテキストメニュー

※画像クリックで拡大表示できます。

リンクのコンテキストメニュー

 

■画像のコンテキストメニュー
※当サイト内の画像を右クリックしても正常なコンテキストメニューは表示されないと思うので、Firefox公式サイトの画像です。

※画像クリックで拡大表示できます。

画像のコンテキストメニュー

 

■当サイトのバージョン150のコンテキストメニューから消えている主な項目

■文字
選択した部分を印刷
追跡を除去した選択部分へのリンクをコピー(グレーアウト)
選択範囲を 〇〇 に翻訳
選択した部分のソースを表示

 

■リンク
(もしかしたら)リンクを新しい 〇〇 タブで開く] 〇〇=コンテナ名
リンクを新しいタブで開く※バージョン150以降、(Firefox側の実験が原因で)プロファイルによっては表示されません。
リンクを分割ビューで開く
リンク先をプレビュー
リンクをブックマーク
追跡を除去リンクをコピー
Google で検索:ページタイトル
リンクテキストを 〇〇 に翻訳

 

■画像・動画・音声
画像をコピー
画像の URL をメールで送信...
動画の URL をメールで送信...
音声の URL をメールで送信...
画像をデスクトップの背景に設定...

 

上記以外は、userChrome.css内の「●コンテキストメニュー●」以降にある設定箇所をご確認くださいませ。

■userChrome.css(上記4.22 追記の件の修正前)

userChrome.cssのみ(コンテキストメニューのON/OFF 修正前)

 

バージョン145・146の MultiRowTabLiteforFx.uc.js の動作確認・調整にあわせて、userChrome.css の中身を大幅に整理しました。

バージョン145未満で使っても問題ありません。

 

■2025.11.20 追記■
普段明るめのテーマを使っているので気づきませんでしたが、ダークテーマの時のメニューバー・タブ・ブックマークツールバーの文字色を見やすくする記述を追加しました。

 

■MultiRowTabLiteforFx.uc.js

MultiRowTabLiteforFx.uc.jsのみ(バージョン152以降用)

■2026.6.18 追記■
ピン留めしたタブを後方に移動する際のバグを修正をしました。

 

■MultiRowTabLiteforFx.uc.jsのみ(バージョン148 ~ 151用)
MultiRowTabLiteforFx.uc.jsのみ(バージョン148 ~ 151用)

※バージョン151以下で使っても(タブグループと分割ビュー以外は)問題ありません。

 

■MultiRowTabLiteforFx.uc.jsのみ(145 ~ 147用)
MultiRowTabLiteforFx.uc.jsのみ(145 ~ 147用)

※バージョン144でも(タブグループ以外は)問題なく動くことは確認しました。

※この記事の冒頭の「2026.3.5追記」に記載の大幅な見直しは反映していません。

 

■注意■
タブ移動時のドラッグ・アンド・ドロップによるタブグループ操作は機能していません。
右クリックからのタブグループ操作は可能です。

 

当サイトで公開しているバージョン145以降の MultiRowTabLiteforFx.uc.js は、バージョン144用の MultiRowTabLiteforFx.uc.js(※「多段タブ.zip」をベースに自分で修正したもの)をベースに、Izheil氏の Quantum-Nox-Firefox-Customizations 内の MultiRowTabLiteforFx.uc.js を一部参考あるいは改変・流用したものです。

 

一部参考あるいは改変・流用したのはバージョン145の時のみですが、元のライセンスは Mozilla Public License 2.0(MPL 2.0)であり、本改変版も同ライセンスに従って公開しています。

 

この改変版スクリプトは、MPL 2.0 の条件に従い、元のライセンスを保持したまま公開しています。

 

また、元々の「多段タブ.zip」にあったConfig設定はできるだけ残しましたが、バージョン145でFirefox本体の内部が色々変更されたため、修正対応できなかった箇所がいくつかあります、すみません。

 

 

■2025.11.5 追記■
2025.11.5時点では、(おそらく)ほぼ問題ない多段タブのユーザースクリプトは大きく分けると3つかな、存在しています。

 

後述の 【参考】多段タブの導入手順が色々ある件について に書いた3つのやり方で分類しますと、

※世界中の多段タブのユーザースクリプトを調査しているわけではありませんので、他にもあるかもしれません。

 

■注意■

それぞれ、

  • 導入に必要なファイルが異なります
  • 当然 userChrome.css に必要な記述も異なります
  • Merci-chao様の[email protected]の場合、別途 about:config での設定が必要です

のでご注意ください。

 

ご興味ある方は、後述の 【参考】多段タブの導入手順が色々ある件について をお読みください。

 

各ファイルを適用する

必要なuserChrome.js用スクリプト(ほにゃらら.uc.js)を用意して『chrome』フォルダ内に入れ、userChrome.cssに必要な記述を追加します。

 

この記事にある私が生成・修正した各ファイルは私用に微調整済みです。

再度書いておきます。

■各ファイルの保存場所
64bitの場合
C:\Program Files (x86)\Mozilla Firefox\config.js
C:\Program Files (x86)\Mozilla Firefox\defaults\pref\config-prefs.js

 

C:\Users\●ユーザー名●\AppData\Roaming\Mozilla\Firefox\Profiles\●プロファイル名●\chrome\userChrome.css
C:\Users\●ユーザー名●\AppData\Roaming\Mozilla\Firefox\Profiles\●プロファイル名●\chrome\userChrome.js
C:\Users\●ユーザー名●\AppData\Roaming\Mozilla\Firefox\Profiles\●プロファイル名●\chrome\MultiRowTabLiteforFx.uc.js

 

プロファイルフォルダ
C:\Users\●ユーザー名●\AppData\Roaming\Mozilla\Firefox\Profiles
の場所は
Winキー + Rで、%appdata%\Mozilla\Firefox\Profiles\ と入力してエンター
で開けます。

 

■注意■
userChrome.cssおよびほにゃらら.uc.jsの文字コードはUTF-8です。

 

Firefox Portableで使うuserChrome.cssはShift-Jisと書いてあるサイトがありましたが、私の環境ではFirefox PortableもuserChrome.cssおよびほにゃらら.uc.jsの文字コードはUTF-8でOKでした。

 

Firefox本体を再起動する

最後に、Firefox本体を再起動します。

 

以上でFirefoxにて多段タブその他userChrome.css等が使える環境になります。

 

Firefoxバージョン150以降では、プロファイルによってはコンテキストメニューの「リンクを新しいタブで開く」が表示されない場合があります。

 

これは、バージョン150で導入された リンクメニューの新仕様 が、プロファイル単位の実験機能(Nimbus)として段階的に有効化されているためです。

 

新仕様が有効になったプロファイルでは、旧来の「リンクを新しいタブで開く」に対応する内部IDが無効化されるため、「リンクを新しいタブで開く」が表示されなくなります。

 

私の場合は

  • アドオンなし
  • 追加テーマなし
  • userChromeは追加してある

のテスト用のプロファイルだけは通常起動でも「リンクを新しいタブで開く」は表示されていますが、それ以外の全てのプロファイルでは、

  • Firefox(デスクトップ版)
  • Firefox Developer Edition
  • Firefox Nightly

の、どのプロファイル・どのFirefoxでも、

  • 通常起動では「リンクを新しいタブで開く」は表示されません。
  • プライベートウィンドウであれば「リンクを新しいタブで開く」が表示されます。

※Firefox Portableは確認していません。

 

つまり4.29時点では、プライベートウィンドウは「実験機能:OFF」の状態で動くみたいです。
まあ、プライベートウィンドウは常用していないので私にとっては意味ないですが。

 

ちなみに私は

  • tabLock_mod2.uc.js および tabProtect_mod2.uc.j による、タブロック・タブプロテクト
  • MouseGestures2_e10s.uc.js および MouseGestures2_e10s_menus.uc.js によるマウスジェスチャー
  • アドオン「Tab Mix - Links」による設定

によって、通常起動のFirefoxでコンテキストメニューの「リンクを新しいタブで開く」がなくてもあまり問題にはなりません。

 

 

タブの色について、とか

バージョン145・146の MultiRowTabLiteforFx.uc.js の動作確認・調整にあわせて、userChrome.cssの中身を大幅に整理しました。

バージョン145未満で使っても問題ありません。

 

アクティブタブ・・・背景黄色で透過 & 文字は黒で太字 & 黒い枠

非アクティブタブ(未読)・・・背景薄い灰色を透過 & 文字は薄い黒
※タブを再読み込みして瞬時に別タブに移動してもキャッシュと全く同じ場合は既読らしい

非アクティブタブ(既読)・・・背景少し濃い灰色を透過 & 文字は黒

 

タブをマウスオーバー(全タブ共通)・・・タブの上に青い線

ピン留めしたタブ以外のタブをマウスオーバー・・・タブの右側に閉じるボタン(『X』ボタン)を表示

 

アクティブタブをマウスオーバー・・・文字は黒で太字(元々そうなっています)

非アクティブタブ(未読)をマウスオーバー・・・文字は赤で太字 & タブの背景は薄い水色を透過

非アクティブタブ(既読)をマウスオーバー・・・文字は黒で太字 & タブの背景は少し濃い水色を透過

 

ある程度ライトテーマ・ダークテーマどちらでも認識しやすいように調整しました。

 

userChrome.cssのコード等

●バージョン148時点でのuserChrome.css
※変更した場合に更新します。

@charset "utf-8";

/* ******************●全般****************** */
/*●文字全部の色*/
#main-menubar > menu,.tab-label{
color: black !important;
}


@media (prefers-color-scheme: dark) {/*■■*/
  /* ■ダークテーマの場合■メニューバー・タブ・ブックマークツールバーの文字色 */
  #main-menubar > menu, .tab-label, #PersonalToolbar toolbarbutton .toolbarbutton-text {
    color: #e0e0e0 !important;
  }
}/*■■*/


/*●メニューの余白*/
#main-menubar > menu {
margin-top: 4px;
}


/* ●アドレスバーを拡大しない● */
/* based on https://old.reddit.com/comments/fwhlva//fmolndz */
#urlbar[breakout][breakout-extend]:not([open]) {
  top: calc((var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2) !important;
  left: 0 !important;
  width: 100% !important;
}


#urlbar[breakout][breakout-extend]:not([open]) > #urlbar-input-container {
  height: var(--urlbar-height) !important;
  padding-block: 0px !important;
  padding-inline: 0px !important;
}


#urlbar[breakout][breakout-extend][breakout-extend-animate] > #urlbar-background {
  animation-name: none !important;
}


#urlbar[breakout][breakout-extend]:not([open]) > #urlbar-background {
  box-shadow: none !important;
}


/*●URL入力欄(左側)*/
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* only needed once */
#urlbar-background, 
#searchbar .searchbar-textbox ,
.searchbar-engine-button
{ background: white !important;}


#urlbar, 
#searchbar .searchbar-textbox 
{opacity: 0.7!important;}


#urlbar:hover, 
#searchbar .searchbar-textbox:hover 
{opacity: 0.8!important}


#urlbar[focused="true"], 
#searchbar .searchbar-textbox[focused="true"]  
{opacity: 1.0!important;}


/* ●リンクをマウスオーバーした時にステータスバーに表示されるURLの文字の大きさ*/
#statuspanel-label {
  font-size: 130% !important;
}



/* ******************●タブその1●****************** */
/*●タブの文字の下の余白*/
/*.tab-text {margin-bottom: 5px !important;}*/


/*●タブの文字の大きさ*/
.tab-label {font-size: small;}


.tab-text {
  margin: 4px 0 !important;
}



/* ========================================================================= */
/* 1. 全般・基本設定 */
/* ========================================================================= */
/* ●タブの角丸を小さくする(少ない角丸に調整) */
:root {
  --tab-border-radius: 2px !important; /* 角丸のサイズを2pxに設定(デフォルトより小さく、0pxで完全に四角に) */
}


.tabbrowser-tab .tab-background {
  border-radius: var(--tab-border-radius) !important; /* タブの背景に角丸を適用 */
}


/* タブ間の区切り線(tab-lineなど)を非表示にする設定を維持 */
.tabbrowser-tab::before,
.tabbrowser-tab::after {
  display: none !important;
}


/* 「タブのマウスオーバーの上部線」と「コンテナのタブの上部線」がFirefoxのバージョンによって違う対策・全タブのマウスオーバー時の青線(アクティブ・非アクティブ共通) */
.tabbrowser-tab:hover .tab-background::before {
  z-index: 1; /*「マウスオーバーの上部線」を「コンテナのタブの上部線」より前面に出す */
}



/* ========================================================================= */
/* 2. マウスオーバー時(上部線と背景・文字) */
/* ========================================================================= */
/* ●全タブ・マウスオーバー時の背景と上部青線(アクティブ以外) */
.tabbrowser-tab:not([selected]):hover .tab-background::before {
  content: "";
  display: inline-block;
  width: 100%;
  height: 3px;
  background-color: #0a84ff !important; /* 濃い青線 */
  margin: -1px var(--user-tab-rounding, 2px) 0;
}


/* ●アクティブタブのマウスオーバー時も青線にする場合(任意) */
.tabbrowser-tab[selected]:hover .tab-background::before {
  content: "";
  display: inline-block;
  width: auto;
  height: 3px;
  background-color: #0a84ff !important;
  margin: -1px var(--user-tab-rounding, 1px) 0;
}


/* ●tab-background自体には border-top を指定しない(競合するため) */
.tabbrowser-tab .tab-background {
  border-top: none !important;
}



/* ========================================================================= */
/* 3. アクティブタブ */
/* ========================================================================= */
/* ●アクティブタブの外枠を黒く囲む */
.tabbrowser-tab[selected] .tab-background {
  border: 1px solid #9c9c9c !important; /* 四辺に黒枠 */
  border-radius: var(--tab-border-radius) !important; /* 角丸を維持 */
  background-color: rgb(255, 255, 0, 0.5) !important; /* 背景は透過黄色のまま */
  background-image: none !important;
  box-shadow: none !important;/*なぜかシャドウがかかるので除去*/
  filter: none !important;
}


/* 背景: 黄色で透過 */
.tabbrowser-tab[selected] .tab-background {
  background-color: rgb(255, 255, 0, 0.5) !important;
  background-image: none !important;
}


/* 文字: 黒で太字 */
.tabbrowser-tab[selected] .tab-label {
  color: black !important;
  font-weight: bold !important;
}



/* ========================================================================= */
/* 4. 非アクティブタブ(未読) */
/* ========================================================================= */
/* 背景:中間グレー・やや透過(Light/Darkテーマ両対応)  
   → 背景テーマが透けすぎないようにしつつ、未読タブの存在感を出す */
.tabbrowser-tab:not([selected])[pending="true"] .tab-background,
.tabbrowser-tab:not([selected])[unreadTab="true"] .tab-background {
  background-color: rgba(194, 194, 194, 0.2) !important !important; 
  background-image: none !important;
}


/* 文字:薄い灰色(既読の黒と差別化)  
   → Lightテーマでは控えめに、Darkテーマでも沈みすぎないように調整 */
.tabbrowser-tab:not([selected])[pending="true"] .tab-label,
.tabbrowser-tab:not([selected])[unreadTab="true"] .tab-label {
  color: #8a8a8a !important /* 薄いグレー文字で未読感を演出 */
  font-weight: normal !important;
}


/* マウスオーバー時:背景=薄い水色、文字=赤で太字  
   → ユーザーの注目を引く視覚効果を追加 */
.tabbrowser-tab:not([selected])[pending="true"]:hover .tab-background,
.tabbrowser-tab:not([selected])[unreadTab="true"]:hover .tab-background {
  background-color: rgba(173, 216, 230, 0.3) !important; /* LightBlue・やや強調 */
  background-image: none !important;
}


.tabbrowser-tab:not([selected])[pending="true"]:hover .tab-label,
.tabbrowser-tab:not([selected])[unreadTab="true"]:hover .tab-label {
  color: red !important; /* マウスオーバー時に強調 */
  font-weight: bold !important;
}



/* ========================================================================= */
/* 5. 非アクティブタブ(既読) */
/* ========================================================================= */
/* 背景: 少し濃い灰色透過 */
.tabbrowser-tab:not([selected]):not([pending="true"]):not([unreadTab="true"]) .tab-background {
  background-color: rgba(183, 183, 183, 0.3) !important;
  background-image: none !important;
}


/* 文字: 黒 */
.tabbrowser-tab:not([selected]):not([pending="true"]):not([unreadTab="true"]) .tab-label {
  color: black !important;
  font-weight: normal !important;
}


/* マウスオーバー時:背景=少し濃い水色、文字=黒で太字 */
.tabbrowser-tab:not([selected]):not([pending="true"]):not([unreadTab="true"]):hover .tab-background {
  background-color: rgba(173, 216, 230, 0.8) !important;
  background-image: none !important;
}


.tabbrowser-tab:not([selected]):not([pending="true"]):not([unreadTab="true"]):hover .tab-label {
  color: black !important;
  font-weight: bold !important;
}



/* ========================================================================= */
/* 6. 未読み込みタブ(pending) */
/* ========================================================================= */
/*「pending="true"」を「未読タブ」として扱っているため、セクション4で文字色やマウスオーバー時のスタイルをすでに定義済み*/
/* タブ復元時にまだ読み込まれていないタブを半透明化 */
.tabbrowser-tab[pending="true"] {
  opacity: 0.6 !important;
}


/* 未読タブでもファビコンを表示する(たぶんバージョン145未満用) */
/*●.tabbrowser-tab[pending="true"] .tab-icon-image {
  opacity: 1 !important;
  visibility: visible !important;
  display: inline !important;
}●*/



/* ========================================================================= */
/* 7. ダークテーマの時の文字色 */
/* ========================================================================= */
@media (prefers-color-scheme: dark) {/*■■*/
/* アクティブタブの文字色(ダークテーマ時) */
  .tabbrowser-tab[selected] .tab-label {
    color: #f0f0f0 !important; /* 明るめの白系 */
  }


/* 非アクティブタブ(既読)の文字色(ダークテーマ時) */
  .tabbrowser-tab:not([selected]):not([pending="true"]):not([unreadTab="true"]) .tab-label {
    color: #d0d0d0 !important; /* やや暗めの白系で控えめに */
  }


/* 非アクティブタブ(未読)の文字色(ダークテーマ時) */
  .tabbrowser-tab:not([selected])[pending="true"] .tab-label,
  .tabbrowser-tab:not([selected])[unreadTab="true"] .tab-label {
    color: #e0e0e0 !important; /* 未読感を保ちつつ明るめに */
  }
}/*■■*/



/* ******************●タブその2(場合によっては必要・不要かも)●****************** */
/* Remove padding between tabs */
.tabbrowser-tab {
    padding-left: 0 !important;
    padding-right: 0 !important;
}


/* Adjust margin on blue tab line for squared background tabs */
.tabbrowser-tab:not([selected], [multiselected]) .tab-background::before {
  margin: -1px 0 0 !important;
}


/* Tweak for covering a line at the bottom of the active tab on some themes 8/11/2021 */
#main-window[sizemode="normal"] #toolbar-menubar[autohide="true"] + #TabsToolbar, 
#main-window[sizemode="normal"] #toolbar-menubar[autohide="true"] + #TabsToolbar #tabbrowser-tabs {
    --tab-min-height: calc(var(--tab-min-height) +10px) !important;
}



/* ******************●その他多段タブ●****************** */
/* ●多段タブ●念の為、残しておく */
/*●
:root{ --multirow-n-rows: 3;}
#tabbrowser-tabs{
min-height: unset !important;
padding-inline-start: 0px !important;
}
@supports (inset-block:auto){
#tabbrowser-tabs > .tabbrowser-arrowscrollbox > .arrowscrollbox-scrollbox{
display: flex;
flex-wrap: wrap;
overflow-y: auto;
max-height: calc(var(--tab-min-height) * var(--multirow-n-rows));
scrollbar-color: var(--toolbar-bgcolor) var(--lwt-accent-color);
scrollbar-width: thin;
}
#tabbrowser-tabs > .tabbrowser-arrowscrollbox {
overflow: -moz-hidden-unscrollable;
display: block;
}
}
@supports not (inset-block:auto){
	#tabbrowser-tabs > .tabbrowser-arrowscrollbox{
	min-height: unset !important;
	}
	#tabbrowser-tabs .scrollbox-innerbox{
	display: flex;
	flex-wrap: wrap;
	}
	#tabbrowser-tabs .arrowscrollbox-scrollbox {
	overflow: -moz-hidden-unscrollable;
	display: block;
	}
}
.tabbrowser-tab{ height: var(--tab-min-height); }
#tabbrowser-tabs .tabbrowser-tab[pinned]{
position: static !important;
margin-inline-start: 0px !important;
}
.tabbrowser-tab > stack{ width: 100%; height: 100% }
#tabbrowser-tabs .scrollbutton-up,
#tabbrowser-tabs .scrollbutton-down,
#alltabs-button,
:root:not([customizing]) #TabsToolbar #new-tab-button,
#tabbrowser-tabs spacer,
.tabbrowser-tab::after{ display: none !important }
●*/



/* ******************●ブックマーク●****************** */
.bookmark-item {height: 21px !important;}


/* ブックマークアイコンの色を変更 */
.bookmark-item[container] {fill:#e8bb00 !important;}



/* ******************●多段ブックマークツールバー●****************** */
/* --bookmark_items_lines: 3; で段数を変更で段数を変更する。 */
/* 右側に動作しないスクロールバーが出てくるので、不要なら#personal-bookmarks #PlacesToolbarに「scrollbar-width: none !important;」を入れると非表示になる。 */
/* ブックマークツールバーに表示されるブックマークの幅を狭めたいなら、#navigator-toolbox #PersonalToolbarにtoolbarbutton.bookmark-item {max-width: 100px !important;}のコードを記述する。 */


:root {
  --bookmark_items_height: 22px; /*●1行あたりの高さ <- bookmark items - line height */
  --bookmark_items_lines: 30; /*●最大の多段数 <- maximum amount of lines */
}


#PersonalToolbar {
  min-height: var(--bookmark_items_height) !important;
  max-height: calc(var(--bookmark_items_height)*(var(--bookmark_items_lines))) !important;

/*●ブックマークの背景*/
background: #ffffff59 !important;
opacity: 1.0 !important;
color : black !important;
}


#personal-bookmarks,
#PlacesToolbar > hbox {
  display: block;
}


#PlacesToolbarItems {
  display: flex;
  flex-wrap: wrap;
  overflow-x: visible;
  overflow-y: auto;
}


#PlacesToolbarItems > .scrollbox-innerbox {
  display: flex;
  flex-wrap: wrap; 
  overflow-x: hidden !important;
  overflow-y: visible !important;
  max-height: calc(var(--bookmark_items_height)*(var(--bookmark_items_lines))) !important;
}


#personal-bookmarks #PlacesToolbar {
  display: block;
  min-height: 0;
  overflow-x: hidden;
  overflow-y: auto;
  max-height: calc( var(--bookmark_items_lines) * var(--bookmark_items_height) );
scrollbar-width: none !important;
}


#personal-bookmarks #PlacesToolbar > .bookmark-item{
  visibility: visible !important;
}


#personal-bookmarks #PlacesToolbar .chevron{
  visibility: collapse;
}


#personal-bookmarks #PlacesToolbar > hbox > hbox{
  overflow-x: hidden;
  overflow-y: hidden;
}


#personal-bookmarks #PlacesToolbar #PlacesToolbarDropIndicator[collapsed="true"],
#personal-bookmarks #PlacesToolbar #PlacesToolbarDropIndicator{
  display: none;
}


#personal-bookmarks #PlacesToolbar toolbarbutton.bookmark-item{
padding-top: 2px !important;
padding-bottom: 2px !important;
/*●元
margin-top: 0px !important;
margin-bottom: 1px !important;
●*/
margin-top: 2px !important;
margin-bottom: 2px !important;
/*●これ効いてない(display: inline;を追加すれば効くらしい
vertical-align: middle;
●*/
}


#personal-bookmarks #PlacesToolbar toolbarseparator{
  -moz-appearance: none !important;
  visibility: visible !important;
  display: inline;
  text-shadow: none !important;
  border-left: 3px solid ThreeDShadow !important;
  border-right: 3px solid ThreeDHighlight !important;
  vertical-align: middle;
}


#personal-bookmarks toolbarbutton.bookmark-item[dragover][open]{
  -moz-appearance: toolbarbutton;
}


#navigator-toolbox #PersonalToolbar { 
  max-height: calc( var(--bookmark_items_lines) * var(--bookmark_items_height) ) !important;
}


/* ブックマークツールバー上部余白調整 */
#PersonalToolbar {
 margin-top: -2px !important;
}


/* 透過フェードインフェードアウト */
/*●
#PlacesToolbarItems:hover{
transition-delay: 0.1s !important;
opacity: 1 !important;
}


#PlacesToolbarItems{
opacity: 0.3 !important;
transition-delay: 2s !important;
transition-duration: 1s !important;
}
●*/


/* ブックマークとメニューの項目間の余白幅 */
menupopup > menuitem,
menupopup > menu {
  padding-block: 0.15em !important;
}


:root {
  --arrowpanel-menuitem-padding: 3px 6px !important;
}


/*●多段ブックマークツールバーの下の余白を消す*/
#PlacesToolbarItems {
contain: initial!important;
}


/*●多段ブックマークツールバーの下の余白を消す*/
#PersonalToolbar .toolbarbutton-1{
padding-bottom: 0px !important;
margin-bottom: 0px !important;
}


/*●多段ブックマークツールバーの上の余白*/
#personal-bookmarks {
padding-top: 2px!important;
}



/* ******************●コンテキストメニュー●****************** */
/* 「/*  #mainPopupSet,」以降の各項目に関して、先頭の「/*」を追加/削除することでメニューの表示/非表示を制御出来ます。お好みで変更してください。先頭の「/*」を追加すると表示、先頭の「/*」を削除すると非表示です。 */
/* ※全角文字を含む場合(拡張機能用の[スクリーンショットを撮る]を指定する場合)、@charsetの指定が必要になります。また、userChrome.cssファイルを指定した文字コードで保存してください。 */

/* コンテキストメニューを削除 */
/* v82.20201031 */
/* see https://www.bugbugnow.net/2017/12/firefox-quantum-57.html */
/*  #mainPopupSet,                      /* ポップアップ */
/*    #tabContextMenu,                  /* タブコンテキストメニュー */
/*        #context_reloadTab,             /* [タブを再読み込み] */
        #context_reloadSelectedTabs,    /* [タブを再読み込み] 67+ */
        #context_toggleMuteTab,         /* [タブをミュート] */
        #context_toggleMuteSelectedTabs,/* [タブをミュート] 67+ */
/*      #context_pinTab,                /* [タブをピン留め] */
/*      #context_unpinTab,              /* [タブのピン留めを外す] */
/*      #context_pinSelectedTabs,       /* [タブをピン留め] 67+ */
/*      #context_unpinSelectedTabs,     /* [タブのピン留めを外す] 67+ */
/*      #context_duplicateTab,          /* [タブを複製] */
/*      #context_duplicateTabs,         /* [タブを複製] 67+ */
/*      #context_duplicateTabs + menuseparator,        /* [区切り] 67+ */
        #context_selectAllTabs,         /* [すべてのタブを選択] 64+ */
        #context_bookmarkSelectedTabs,  /* [タブをブックマーク...] */
        #context_bookmarkTab,           /* [タブをブックマーク] 64+ */
        #context_reopenInContainer,     /* [コンテナーを開きなおす] */
        #context_moveTabOptions,        /* [タブを移動] 64+ */
        #moveTabOptionsMenu,            /* [タブ移動] 67+ */
/*          #context_moveToStart,         /* [最初のタブへ移動] 67+ */
/*          #context_moveToEnd,           /* [最後のタブへ移動] 67+ */
          #context_openTabInWindow,     /* [新しいウィンドウへ移動] 67+ */
        #context_sendTabToDevice,       /* [タブを端末へ送信] */
        #context_sendTabToDevice + menuseparator,       /* [区切り] */
/*        #context_reloadAllTabs,         /* [すべてのタブを再読み込み] 78- */
        #context_bookmarkAllTabs,       /* [すべてのタブをブックマーク...] 78- */
/*      #context_closeTabOptions,       /* [複数のタブを閉じる] 78+ */
/*        #context_closeTabsToTheEnd,   /* [右側のタブをすべて閉じる] */
/*        #context_closeOtherTabs,      /* [他のタブをすべて閉じる] */
/*      #context_undoCloseTab,          /* [閉じたタブを元に戻す] */
        #context_closeTab,              /* [タブを閉じる] */
        #context_closeSelectedTabs,     /* [タブを閉じる] 67+ */
/*      #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-a11y,          /* [アクセシビリティプロパティを調査] 67+ 82+ */
/*      #context-inspect,               /* [要素を調査] 82+ */
/*      #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,      /* [プロパティ] */
/*    #pageActionPanel,                 /* ページアクション */
/*      #pageAction-panel-bookmark,     /* [このページをブックマーク] */
/*      #pageAction-panel-pocket,       /* [ページを Pocket に保存] */
/*      #pageAction-panel-pinTab,       /* [タブをピン留め][タブのピン留めを外す] */
/*      #pageAction-panel-bookmarkSeparator,    /* [区切り] */
/*      #pageAction-panel-copyURL,      /* [リンクをコピー] */
/*        #pageAction-panel-emailLink,    /* [ページの URL をメールで送信...] */
        #pageAction-panel-sendToDevice, /* [1 個のタブを端末へ送信] */
        #pageAction-panel-shareURL,     /* [共有] */
/*      #pageAction-panel-screenshots_mozilla_org,      /* [スクリーンショットを撮る] */
/*      #pageAction-panel-builtInSeparator,     /* [区切り] */
    #context-dummy-dummy-dummy          /* ダミー */
{
  display: none !important;
}


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


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



/* ******************●サイドバー●****************** */
/* サイドバーを自動開閉するようにする (左側用)*/
:root {
  --thin-tab-width: 36px;
  --wide-tab-width: 300px;
}


#sidebar-box {
  position: relative !important;
  overflow-x: hidden !important;
  min-width: var(--thin-tab-width) !important;
  max-width: var(--thin-tab-width) !important;
  box-shadow: 0 0 2px 0 rgba(0,0,0,.35);
  z-index: 1 !important; 
  transition: all .1s ease; 
  flex-basis: var(--thin-tab-width) !important;
  flex-shrink: 0 !important;
}


#sidebar-header {
  width: var(--thin-tab-width) !important;
}


#sidebar {
  min-width: var(--thin-tab-width) !important;
  max-width: var(--thin-tab-width) !important;
opacity: 0 !important;
}


#sidebar-box:hover {
  min-width: var(--wide-tab-width) !important;
  max-width: var(--wide-tab-width) !important;
  width: var(--wide-tab-width) !important;
  flex-basis: var(--wide-tab-width) !important;
  flex-shrink: 0 !important;
/* 0.5秒ホバーで開く */
transition-delay: 0.5s!important;
}


#sidebar-header:hover {
  width: var(--wide-tab-width) !important;
}


#sidebar:hover {
  min-width: var(--wide-tab-width) !important;
  max-width: var(--wide-tab-width) !important;
opacity: 1 !important;
}


/* ●サイドバーの Tree Style Tab - ツリー型タブ用● */
/* ツリー型タブ用 */
tab-item {
border-color:#000!important;
}


tab-item.active {
background-color: #A05E63!important;
}


tab-item.active .label-content {
font-weight: bold!important;
}



/* ******************●その他●****************** */
/*●tabProtect_mod2.uc.jsのアイコンの位置●*/
tab[tabProtect] .tab-icon-protect{
  /*■元■margin-top: 0px;■*/ /*要調整*/
  margin-top: -8px !important;
  margin-left: 0px !important; /*要調整*/
}


/*●tabLock_mod2.uc.jsのアイコンの余白●*/
  tab[tabLock] .tab-icon-lock{
    margin-top: 0px !important; /*要調整*/
    margin-left: 0px !important; /*要調整*/
}


/* ●DWMBlurGlassを導入している場合、KB5068861適用以降、Firefoxだけ右クリックが透過される対策● */
menupopup {
  -moz-appearance: menupopup !important;
  background-color: -moz-Dialog !important;
  background-image: none !important;
  backdrop-filter: none !important;
  opacity: 0.8 !important;
}

 

●user.js■2025.12.08少し修正 & 2026.2.25テレメトリ関係を全て無効
独自の設定が山盛りです。
※特にRamディスク向けのキャッシュ設定があるので、不要な場合は「Ramディスク向けのキャッシュ」の箇所を確認・変更してお使いください。

//■■■■■ ■■■■■ セキュリティ ■■■■■ ■■■■■
//●現在のFirefoxでは機能しない●user_pref("capability.policy.policynames", "allowclipboard");
//●現在のFirefoxでは機能しない●user_pref("capability.policy.allowclipboard.sites", "http://www.mozilla.org http://blog.ameba.jp");
//●現在のFirefoxでは機能しない●user_pref("capability.policy.allowclipboard.Clipboard.cutcopy", "allAccess");
//●現在のFirefoxでは機能しない●user_pref("capability.policy.allowclipboard.Clipboard.paste", "allAccess");


// 情報収集機能(ヘルスレポート)を無効化
//↓オプション画面にもある
user_pref("datareporting.healthreport.uploadEnabled", false);
user_pref("datareporting.healthreport.logging.consoleEnabled", false);
user_pref("datareporting.healthreport.service.enabled", false);
user_pref("datareporting.policy.dataSubmissionEnabled", false);


// 情報収集機能(テレメトリ)を無効化
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
user_pref("browser.newtabpage.activity-stream.telemetry", false);
user_pref("browser.ping-centre.telemetry", false);
user_pref("datareporting.healthreport.service.enabled", false);
user_pref("datareporting.healthreport.uploadEnabled", false);
user_pref("datareporting.policy.dataSubmissionEnabled", false);
user_pref("datareporting.sessions.current.clean", true);
user_pref("devtools.onboarding.telemetry.logged", false);
user_pref("toolkit.telemetry.archive.enabled", false);
user_pref("toolkit.telemetry.bhrPing.enabled", false);
user_pref("toolkit.telemetry.enabled", false);
user_pref("toolkit.telemetry.firstShutdownPing.enabled", false);
user_pref("toolkit.telemetry.hybridContent.enabled", false);
user_pref("toolkit.telemetry.newProfilePing.enabled", false);
user_pref("toolkit.telemetry.prompted", 2);
user_pref("toolkit.telemetry.rejected", true);
user_pref("toolkit.telemetry.reportingpolicy.firstRun", false);
user_pref("toolkit.telemetry.server", "");
user_pref("toolkit.telemetry.shutdownPingSender.enabled", false);
user_pref("toolkit.telemetry.unified", false);
user_pref("toolkit.telemetry.unifiedIsOptIn", false);
user_pref("toolkit.telemetry.updatePing.enabled", false);


//●位置情報通知機能を無効
user_pref("geo.enabled", false);


//●アクセシビリティサービスを無効化
user_pref("accessibility.force_disabled", 1);


//●日本語URLをそのまま表示する※ホモグラフ攻撃防止を優先する場合はtrueにする
user_pref("network.IDN_show_punycode", true);


//●URLのプロトコル(http・https)を表示する
user_pref("browser.urlbar.trimURLs", false);



//■■■■■ ■■■■■ その他 ■■■■■ ■■■■■
// リーダービューを無効
user_pref("reader.parse-on-load.enabled", false);


// 右クリックを禁止させない
user_pref("nglayout.events.dispatchLeftClickOnly", true);


// JavaScriptのコンテキストメニューを無効化または変更させない
//user_pref("dom.event.contextmenu.enabled", false);


//●YouTube対策
user_pref("general.useragent.override.youtube.com", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36");//●わざと最新のChromeではなく少し古いバージョンに偽装している


//●YouTubeの動画の読み込み完了を待たず音声再生させる
//●以下を設定すると逆に遅くなる場合がある
//●user_pref("dom.webcomponents.enabled", true);
//●user_pref("dom.webcomponents.shadowdom.enabled", true);
//●user_pref("dom.webcomponents.customelements.enabled", false);



//●追加のYouTube対策その1
//●ハードウェア アクセラレーション:有効であることが前提
user_pref("gfx.webrender.layer-compositor", true);

//●主にAMD向け
//●user_pref("media.wmf.zero-copy-nv12-textures-force-enabled", true);//●古いPCでは無効「false」推奨
//●user_pref("gfx.direct3d11.reuse-decoder-device-force-enabled", true);

//●必要に応じて
user_pref("media.av1.enabled", false);//●AV1コーデックを無効


//●必要に応じて
user_pref("dom.ipc.processCount", 16);//●初期値:8●メモリ使用量が増えるので注意//●YouTube対策と重複
user_pref("dom.ipc.processCount.webIsolated", 8);//●初期値:4●メモリ使用量が増えるので注意//●YouTube対策と重複



//●追加のYouTube対策その3
//●uBlock Originの設定 → プライバシーにて、「先読み機能を無効にする」をチェックOFFが前提
user_pref("security.remote_settings.crlite_filters.enabled", true);
//●user_pref("network.http.speculative-parallel-limit", 10);//●マウスオーバーで先読み。有効にするとセキュリティ低下の可能性あり。初期値:0
user_pref("network.http.speculative-parallel-limit", 0);//一度「0」以外で設定すると、「0」で再設定しないと上書き反映できない


//●追加のYouTube対策その4
user_pref("network.dnsCacheEntries", 4096);
user_pref("browser.cache.disk.metadata_memory_limit", 6000);


//●全画面時のメッセージを非表示にする※ HTML5版のプレイヤーのみ
user_pref("full-screen-api.warning.timeout", 0);


//●マウスのフォーカスが外れる対策※おまじない
//●user_pref("mousewheel.withnokey.action", 0);//●推奨?は 0
//●user_pref("mousewheel.withnokey.numlines", 1);//●推奨?は 1
//●user_pref("mousewheel.withnokey.sysnumlines", true);//●


//●Ctrl + Shift + Qでブラウザが閉じる(警告なし)のを無効にする
user_pref("browser.sessionstore.warnOnQuit", true);
user_pref("browser.warnOnQuit", true);
user_pref("browser.quitShortcut.disabled", true);


//●アドオンにElectrolysis技術と互換性のないものが使われているとマルチプロセス機能が有効にならない対策
//●今はデフォルトで有効になっている●user_pref("browser.tabs.remote.force-enable", true);


//●Pocket サービスを無効
user_pref("extensions.pocket.enabled", false);


//●「おすすめのテーマ」を非表示にする
user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);


//●Firefoxだけカラフルボックスのサポートサイト(help.colorfulbox.jp)の表示が遅い対策
user_pref("capability.policy.policynames", "nojs_for_help.colorfulbox.jp");
user_pref("capability.policy.nojs.sites", "https://help.colorfulbox.jp/");
user_pref("capability.policy.nojs.javascript.enabled", "noAccess"); 


//●ページ読込中に砂時計になる対策
user_pref("ui.prefersReducedMotion", 0);//●元は存在しない


//●リモートデバッグを常に許可
user_pref("devtools.debugger.force-local", true);
user_pref("devtools.debugger.prompt-connection", false);
//●Firefox自身のデバッグ用
//●使い方: ツール → ブラウザツール → ブラウザツールボックス
//●あるいは、 F12 → Ctrl + Shift + Alt + I
//●
//●その後、『リモートデバッグ接続要求』を許可する
user_pref("devtools.chrome.enabled", true);
user_pref("devtools.debugger.remote-enabled", true);


//●AIチャット機能を無効
user_pref("browser.ml.chat.menu", false);

//●画像の右クリックで「Google Lensによる画像検索」を無効化
//●user_pref("browser.search.visualSearch.featureGate", false);



//■■■■■ ■■■■■ 高速化 ■■■■■ ■■■■■
//●その他 browser.cache. 関係
//●●●browser.cache.disk.parent_directoryは後述●●●
user_pref("browser.cache.check_doc_frequency", 3);//●ここが 1 だとページにアクセスするたびに更新を確認するけど、ページの読み込みが少し遅くなる
user_pref("browser.cache.disk.amount_written", 53203);//●53203●Developer Editionの元は3998

//●IPv6を無効にする
//●user_pref("network.dns.disableIPv6", false);//●trueでIPv6無効


//●高速化・全てに共通の設定
//●廃止済み●user_pref("network.http.pipelining", true);
//●廃止済み●user_pref("network.http.proxy.pipelining", true);
//●廃止済み●user_pref("network.http.pipelining.maxrequests", 32);//●元は32
user_pref("content.notify.backoffcount", 5);//●元は5
user_pref("plugin.expose_full_path", true);
user_pref("ui.submenuDelay", 0);//●元は0

//●廃止済み●user_pref("network.http.pipelining.ssl", true);
//●廃止済み●user_pref("network.http.pipelining.firstrequest", true);


//●高速化●速いPC・速い回線速度の場合
user_pref("nglayout.initialpaint.delay", 0);//●元は0
user_pref("network.http.max-connections", 256);//●初期値:900
user_pref("network.http.max-connections-per-server", 32);//●廃止済みなので無視される
user_pref("network.http.max-persistent-connections-per-proxy", 32);//●初期値:32
user_pref("network.http.max-persistent-connections-per-server", 8);//●元は8


//●効果不明user_pref("content.notify.interval", 750000);


//●メモリキャッシュ
user_pref("browser.cache.memory.enable", true);
user_pref("browser.cache.memory.capacity", 2097152);//●元は2097152(2GB)/524288(512MB)
user_pref("browser.cache.memory.max_entry_size", 128);//●変更前:-1●変更後:128(YouTube対策)●元は200MB(204800)●初期値は5MB(5120)


//●Ramディスク向けのキャッシュ
user_pref("browser.cache.disk.enable", true);
user_pref("browser.cache.disk.parent_directory", "Z:\\temp");//●●●about:configからじゃないと反映されない●●●
user_pref("browser.cache.disk.capacity", 4194304);//●4GB●元は2GB(2097152)
user_pref("browser.cache.disk.smart_size.enabled", false);
user_pref("browser.cache.disk.smart_size.first_run", false);
user_pref("browser.cache.disk.smart_size.use_old_max", false);
user_pref("browser.cache.disk.smart_size_cached_value", 358400);//●350MB


//●ページの先読み
user_pref("network.predictor.enabled", true);
user_pref("network.prefetch-next", true);//●uBlock Originの設定 → プライバシーにて、「先読み機能を無効にする」をチェックOFF●


//●DNSプリフェッチ
//●uBlock Originの設定で『先読み機能を無効にする』をOFFにしないとダメ●
user_pref("network.dns.disablePrefetch", false);
user_pref("network.dns.disablePrefetchFromHTTPS", false);

user_pref("network.predictor.enable-hover-on-ssl", true);
user_pref("network.predictor.enable-prefetch", true);


//●httpキャッシュ
user_pref("browser.cache.use_new_backend", 1);


//●セッション保存時間を長くして動画サイトのイライラを解消する、とのこと
user_pref("browser.sessionstore.interval", 60000);//●元は15000

//●以前のセッションを復元を無効●高速化のためにセッション保存を無効にしたのかも?
user_pref("browser.sessionstore.resume_from_crash", false);


//30分以上触っていないタブだけ自動アンロード
user_pref("browser.tabs.unloadOnLowMemory.min_inactive_time", 1800000);


//●同一サイト用プロセスを4本に抑え、プロセス増殖とガベージコレクションの負荷を防ぐ
//●user_pref("dom.ipc.processCount.webIsolated", 4);//●YouTube対策と重複

//●JavaScriptヒープ上限を1024MBに引き上げ、ガベージコレクション回数を減らす
user_pref("javascript.options.mem.high_water_mark", 2048);//●元は1024●WordPress編集画面で1記事10万文字以上とかで遅くなる・無反応になる対策

//●「閉じたタブを元に戻す」履歴を50 → 25件に減らし、メモリ使用量を抑える
user_pref("browser.sessionstore.max_tabs_undo", 25);


//●http3を無効にする
user_pref("network.http.http3.enabled", false);//●無効●WordPress編集画面で1記事10万文字以上とかで遅くなる・無反応になる対策の場合はこっちにする
//●user_pref("network.http.http3.enabled", true);//●有効


//●動画サイトを大量に開き続けるとたまにタブがクラッシュする対策
user_pref("browser.cache.disk.max_entry_size", 128);//●元は51200
user_pref("places.history.expiration.transient_current_max_pages", 30000);//●元は78252
user_pref("places.history.expiration.max_pages", 20000);//●新規作成

//●続・高速化
user_pref("network.buffer.cache.size", 2662144);//●256KB●初期値は332768(32KB)
user_pref("network.buffer.cache.count", 128);//●元は24●128
user_pref("network.http.pacing.requests.burst", 10);//●初期値は10●32はだめ?
user_pref("network.http.pacing.requests.min-parallelism", 10);//●初期値は6
user_pref("network.websocket.max-connections", 400);//●初期値は200
user_pref("network.ssl_tokens_cache_capacity", 32768);//●初期値は2048
user_pref("security.pki.crlite_mode", 2);//●初期値は3

user_pref("gfx.webrender.all", true);
user_pref("gfx.webrender.enabled", true);
user_pref("gfx.webrender.precache-shaders", true);
user_pref("gfx.webrender.compositor", true);
user_pref("gfx.canvas.accelerated", true);
user_pref("gfx.canvas.accelerated.cache-items", 32768);
user_pref("gfx.canvas.accelerated.cache-size", 4096);
user_pref("gfx.content.skia-font-cache-size", 80);
user_pref("image.cache.size", 10485760);
user_pref("image.mem.decode_bytes_at_a_time", 131072);
user_pref("image.mem.shared.unmap.min_expiration_ms", 120000);
user_pref("layers.gpu-process.enabled", true);
user_pref("media.memory_cache_max_size", 104857600);//●元は1048576(1M)/209715200(200MB)/524288000(500MB)
user_pref("media.memory_caches_combined_limit_kb", 2560000);
user_pref("media.cache_size", 2048000);//●元は2048000(2GB)
user_pref("media.cache_readahead_limit", 9000);//●元は9000
user_pref("media.cache_resume_threshold", 6000);//●元は6000■注意■12000とか値を大きくすると、十分に溜まるまで再生を始めない


//●WordPress編集画面で1記事10万文字以上とかで遅くなる・無反応になる対策
user_pref("dom.max_script_run_time", 120);//●スクリプトの最大実行時間(秒)●修正前:30●初期値:10


//■■■■■ ■■■■■ userChrome関係 ■■■■■ ■■■■■
//●userChrome.cssを使うための設定
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);

//●何故か設定してある項目
user_pref("browser.tabs.insertRelatedAfterCurrent", true);
user_pref("browser.tabs.closeWindowWithLastTab", false);
user_pref("browser.search.openintab", true);
user_pref("browser.tabs.loadBookmarksInTabs", true);
user_pref("browser.urlbar.autoFill", false);


//●後々見たらtrueあるいはfalseになってる
user_pref("browser.cache.disk.smart_size.enabled", false);
user_pref("browser.urlbar.openintab", true);
//●現在のFirefoxでは機能しない●user_pref("browser.proton.contextmenus.enabled", false);
//●現在のFirefoxでは機能しない●user_pref("browser.proton.doorhangers.enabled", false);
//●現在のFirefoxでは機能しない●user_pref("browser.proton.enabled", false);
//●現在のFirefoxでは機能しない●user_pref("browser.proton.modals.enabled", false);


//●ビルトインページでもマウスジェスチャーを有効にする
//●アドオン無効化するのを解除
user_pref("privacy.resistFingerprinting.block_mozAddonManager", true);//●初期値:false
user_pref("extensions.webextensions.restrictedDomains","");//元はaccounts-static.cdn.mozilla.net,accounts.firefox.com,addons.cdn.mozilla.net,addons.mozilla.org,api.accounts.firefox.com,content.cdn.mozilla.net,discovery.addons.mozilla.org,install.mozilla.org,oauth.accounts.firefox.com,profile.accounts.firefox.com,support.mozilla.org,sync.services.mozilla.com



/*■■■■■ ■■■■■ 以下、タブ関係 ■■■■■ ■■■■■*/
//●最後のタブを閉じてもウィンドウを閉じない
user_pref("browser.tabs.closeWindowWithLastTab", false);


//●検索ボックスでの検索時に結果を新しいタブで開く
user_pref("browser.search.openintab", true);


//●「タブ」の切り離し(分離)を無効
user_pref("browser.tabs.allowTabDetach", false);


//●全タブ自動読み込みを無効
user_pref("browser.sessionstore.restore_on_demand", true);


//●ブックマークを新しいタブで開く
user_pref("browser.tabs.loadBookmarksInTabs", true);


//●アクティブでないタブをアンロードしてシステムのメモリーを節約する
user_pref("browser.tabs.unloadOnLowMemory", false);


//●別ウィンドウで開く を 新しいタブで開くに変更、つまりbrowser.link.open_newwindowの設定に従う
user_pref("browser.link.open_newwindow", 3);
user_pref("browser.link.open_newwindow.restriction", 0);


//●タブのプレビューを無効
user_pref("browser.tabs.hoverPreview.enabled", false);


//●タブ上でマウスホイールのスクロールでタブ切り替え
user_pref("toolkit.tabbox.switchByScrolling", true);


//●「タブをタスクバーに追加します」を無効にする
user_pref("browser.taskbarTabs.enabled", false);


//●Tab Mix Links用
user_pref("browser.link.open_newwindow", 3);
user_pref("browser.link.open_newwindow.override.external", 3);
user_pref("browser.link.open_newwindow.restriction", 2);
user_pref("browser.tabs.opentabfor.middleclick", true);
user_pref("browser.altClickSave", false);


//●たまに勝手に「履歴:履歴を一切記憶させない」になる対策
user_pref("browser.privatebrowsing.autostart", false); // これがtrueだと「履歴を一切記憶させない」モードになるらしい
user_pref("places.history.enabled", true); // 履歴機能自体の有効化
user_pref("privacy.sanitize.sanitizeOnShutdown", true); // 終了時のデータ消去機能を有効化
user_pref("privacy.clearOnShutdown.history", false); // 終了時に履歴をクリアしない
user_pref("privacy.clearOnShutdown.sessions", false); // 終了時にセッションをクリアしない
user_pref("privacy.clearOnShutdown.cache", true); // 終了時にキャッシュをクリア
user_pref("privacy.clearOnShutdown.formdata", true); // 終了時にフォーム履歴をクリア

 

AboutAddonsPlus●改●.uc.js

/pre>// ==UserScript==
// @name           Show addon details in about:addons
// @include        about:addons
// ==/UserScript==

(function() {
    const lazy = {};
    ChromeUtils.defineESModuleGetters(lazy, {
        AddonManager: "resource://gre/modules/AddonManager.sys.mjs"
    });
    function show() {
        const addons = document.querySelectorAll(".addon-name");
        for (let addon of addons) {
            const addonId = addon.querySelector("a")?.href.slice("addons://detail/".length);
            if (addonId) lazy.AddonManager.getAddonByID(decodeURIComponent(addonId)).then(result => {
                const {version, updateDate} = result;
                const info = document.createElement("span");
                info.style.fontSize = "smaller";
                info.style.fontStyle = "italic";
                info.style.marginInlineEnd = "8px";
                //■元info.textContent = `${version} - ${updateDate.toLocaleDateString("ja-JP")}`;
                info.textContent = `${version}`;
                                
                addon.insertAdjacentElement("afterend", info);
            }).catch(err => console.error(addonId, err));
        }
    }
    document.addEventListener("view-loaded", show);
    if (!gViewController.isLoading) show();
}());

 

OpenWith_1.2.1c.uc.js●改●.uc.js

// ==UserScript==
// @name			OpenWith
// @description			現在のページと選択したリンクを別のブラウザで開くメニューをコンテキストメニューに追加します。
// @version			1.2.1c  143+
// @version			2025/09/16
// @author			y2k
// @include			main
// @charset			UTF-8
// @namespace			https://egg.5ch.net/test/read.cgi/software/1741415944/492,493
// @note			アプリケーションアイコンを表示
// @note			.uc.jsに書き換え

// ==/UserScript==
(function() {
"use strict";
/*
	使う前にここを自分の環境にあわせて変更(\は\\に置換)
	引数を渡す場合は以下のようにする
		C:\\Program Files\\Internet Explorer\\iexplore.exe<>$1^^引数^^引数
			※$1はURLに変換される
*/
const BrowserPath = {
	"■Firefox":	"C:\\Program Files\\Mozilla Firefox\\firefox.exe",
	"Firefox(プライベートウィンドウ)":	"C:\\Program Files\\Mozilla Firefox\\firefox.exe<>-private-window^^$1",

	"■Firefox Developer Edition":	"C:\\Program Files\\Firefox Developer Edition\\firefox.exe",
	"Firefox Developer Edition(プライベートウィンドウ)":	"C:\\Program Files\\Firefox Developer Edition\\firefox.exe<>-private-window^^$1",

	"■Firefox Nightly":	"C:\\Program Files\\Firefox Nightly\\firefox.exe",
	"Firefox Nightly(プライベートウィンドウ)":	"C:\\Program Files\\Firefox Nightly\\firefox.exe<>-private-window^^$1",

//●	"●削除した●Waterfox G系":	"C:\\Program Files (x86)\\Waterfox-G\\waterfox.exe<>$1^^-no-remote^^-p^^default-G4",
//●	"●削除した●Waterfox Classic":	"Z:\\Waterfox\\waterfox.exe",

	"■Chrome":	"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
	"Chrome(シークレットウィンドウ)":	"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe<>$1^^-incognito",

	"■Microsoft Edge":		"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
	"Microsoft Edge(inprivateウィンドウ)":	"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe<>$1^^--inprivate",

//●	"●入れてない●Opera":	"C:\\Users\\●ほにゃらら●\\AppData\\Local\\Programs\\Opera\\opera.exe",
};

const FlatMenu = false;

const OpenWith = {
	start: function() {
		const cm = document.getElementById("contentAreaContextMenu");
		cm.addEventListener("popupshowing", function(e) {
			if (e.target == this) { OpenWith.onpopup(e); }
		}, false);
	},

	createMenu: function() {
		if (this.pageItem || this.linkItem) {
			return;
		}

		const contextMenu = document.getElementById("contentAreaContextMenu");
		const pageMenu = this.$C("menu", { id: "context-open-with-page", label: "このページを..." });
		contextMenu.insertBefore(pageMenu, contextMenu.querySelector(":scope > #context-bookmarkpage, :scope > #context-savepage"));

		const linkMenu = this.$C("menu", { id: "context-open-with-link", label: "リンクを..." });
		contextMenu.insertBefore(linkMenu, contextMenu.querySelector(":scope > #context-sep-open"));

		this.pageItem = this.createMenuItem(pageMenu, "openPage", FlatMenu? "$1 でこのページを開く": "$1 で開く");
		this.linkItem = this.createMenuItem(linkMenu, "openLink", FlatMenu? "$1 でリンクを開く": "$1 で開く");
	},

	createMenuItem: function(menu, method, format) {
		const frag = document.createDocumentFragment();

		let menuitem = [];
		for (let i of Object.keys(BrowserPath)) {
			const item = this.$C("menuitem", {
				label:	format.replace("$1", i),
				class:	"menuitem-iconic",
				image: "moz-icon:file:///" + encodeURI(BrowserPath[i].split("<>")[0] + "?size=16"),
/*
				image: "moz-icon:file:///" + encodeURIComponent(BrowserPath[i].split("<>")[0]) + "?size=16",
*/
				value:	JSON.stringify([ method, i ]),
			});
			item.addEventListener("command", this, false);

			frag.appendChild(item);
			menuitem[menuitem.length] = item;
		}

		if (!FlatMenu) {
			const menupopup = this.$C("menupopup");
			menupopup.appendChild(frag);
			menu.appendChild(menupopup);
			menuitem = [ menu ];
		}
		else {
			const parent = menu.parentNode;
			parent.insertBefore(frag, menu);
			parent.removeChild(menu);
		}

		return menuitem;
	},

	$C: function(tag, attrs) {
		const elem = document.createXULElement(tag);
		if (attrs) {
			for (let key of Object.keys(attrs))
				elem.setAttribute(key, attrs[key]);
		}
		return elem;
	},

	onpopup: function(e) {
		this.createMenu();

		const isHtml = /^(https?|file):/.test(gBrowser.currentURI.spec);
		const pageItemHidden = !isHtml || gContextMenu.onLink || gContextMenu.onTextInput;
		const linkItemHidden = !isHtml || !gContextMenu.onLink || gContextMenu.onTextInput;

		const pageItem = this.pageItem;
		for (let i = 0, l = pageItem.length; i < l; i++) {
			pageItem&#91;i&#93;.hidden = pageItemHidden;
		}
		const linkItem = this.linkItem;
		for (let i = 0, l = linkItem.length; i < l; i++) {
			linkItem&#91;i&#93;.hidden = linkItemHidden;
		}
	},

	handleEvent: function(event) {
		if (event.type === "command") {
			const &#91; method, key &#93; = JSON.parse(event.originalTarget.getAttribute("value"));
			const url = method === "openPage"? gBrowser.currentURI.spec: gContextMenu.linkURL;
			this.launch(BrowserPath&#91;key&#93;, url);
		}
	},

	launch: function(browserPath, openURL) {
		let &#91; path, args &#93; = browserPath.split("<>");
		if (args) {
			args = args.split("^^").map(a => a.replace("$1", openURL));
		} else {
			args = [ openURL ];
		}

		const file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
		file.initWithPath(path);

		const process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
		process.init(file);
		process.run(false, args, args.length, {});
	},
};

OpenWith.start();

})();

 

タブをダブルクリックでリロードv2●改●.uc.js

(function(){

//●元●Firefox:バージョン126未満およびWaterfox:バージョンG6.0.16(たぶん全Wateffox)はこっちじゃないと機能しない●gBrowser.tabContainer.addEventListener("dblclick", function(e){if(!!e.target.closest('.tabbrowser-tab'))BrowserReload()},false)

//●Firefox:バージョン126以降はこっちじゃないと機能しない●
gBrowser.tabContainer.addEventListener("dblclick", function(e){if(!!e.target.closest('.tabbrowser-tab'))BrowserCommands.reload()},false)
})()

 

以上です。
もし使う場合は、各ファイル私のほうで色々手を入れていますので、(お好みの表示・挙動にならない場合は)各ファイルをご自身の環境にあわせて修正し自己責任でお使いください。

 

 

 

以下は興味がある場合以外は読む必要はありません。

   

【参考】多段タブの導入手順が色々ある件について

ネットで色々調べているとFirefoxの多段タブに関して導入手順が色々なやり方があります。

 

主に、

  • 【やり方その1】シンプルでxPref.sys.mjsが不要(当サイトはこれ)
  • 【やり方その2】高機能というかxPref.sys.mjsが必要
  • 【やり方その3】やり方その2よりも、さらに色々ファイルが必要

と3パターンあり、ネットの情報はゴチャゴチャです。

 

■注意■
後述のやり方その1その2その3では導入手順によって

  • MultiRowTabLiteforFx.uc.jsのコードは異なります。
  • userChrome.jsのコードは全く異なります。
  • userChrome.cssのコードは同じで大丈夫な気がします。
 

やり方その3はおすすめしませんので、やり方その1その2の比較を表にしました。

 

■■■やり方その1・その2の比較■■■

■やり方その1
シンプル・軽量・最小構成。
多段タブ等の基本機能のみならこれで十分。

 

■やり方その2
汎用性・拡張性重視。
複数スクリプトや依存関係管理に強い。
高機能・設定管理も可能。

 
やり方その1
(当サイトはこれ)
やり方その2
userChrome.cssほぼ同じでOK
(多少追記・微調整があっても基本同じ)
ローダー構成userChrome.js単体
(chrome直下)
userChrome.js+xPref.sys.mjs等
(chrome/utils)
userChrome.js全く違う
(読み込み方法も目的も違う)

全く違う
(ローダー仕様)
userChrome.jsの動かし方直接ロードローダー経由でロード
やり方その1やり方その2
utilsフォルダ必要か?不要必要
chrome.manifest必要か?不要必要
xPref.sys.mjs必要か?不要必要
(設定管理に使用)
やり方その1やり方その2
MultiRowTabLiteforFx.uc.js違う
(シンプル版)
違う
(高度版)
 

やり方その1:シンプル・軽量※xPref.sys.mjsは不要

当サイトの多段タブの導入手順です、というか

https://github.com/alice0775/userChrome.js

のuserchrome.jsのインストール方法 方法 その1 と同じです。

 

つまり当サイトの多段タブの導入方法はAlice0775さんの「userchrome.jsのインストール方法 方法 その1」に準拠しています。

私は元々は firefox用スクリプトアップローダー の「多段タブ.zip」を使っていましたが、

  • バージョン144まで:上記「多段タブ.zip」の更新が途絶えたので仕方なく自分で修正して使っていました。
  • バージョン145:上記「多段タブ.zip」ではうまくいかないので、Izheil氏のMultiRowTabLiteforFx.uc.jsを元に、必要な箇所を日本語訳 & 必要に応じてコード修正しました。
 

【インストールファイルおよびインストール場所】
C:\Program Files (x86)\Mozilla Firefox\config.js
C:\Program Files (x86)\Mozilla Firefox\defaults\pref\config-prefs.js
および
プロファイルフォルダ\chrome\userChrome.css
プロファイルフォルダ\chrome\userChrome.js
プロファイルフォルダ\chrome\MultiRowTabLiteforFx.uc.js

 

プロファイルフォルダ
C:\Users\●ユーザー名●\AppData\Roaming\Mozilla\Firefox\Profiles
の場所は
Winキー + Rで、%appdata%\Mozilla\Firefox\Profiles\ と入力してエンター
で開けます。

 

やり方その1は比較的シンプル・軽量な導入手順です。

 

やり方その1はuserChrome.jsがローダーとして機能し、このuserChrome.jsが同じchromeフォルダ内にある「ほにゃらら.uc.jsファイル」(例、MultiRowTabLiteforFx.uc.js)を探して実行します。

 

最近のFirefoxではconfig.js と config-prefs.js の設定のみでuserChrome.js をブラウザ起動時に認識・実行させるようになっているため、追加で utils フォルダや chrome.manifest は不要です。

 

つまりuserChrome.js 自体が自己完結していて、やり方その2その3のように他のライブラリ(xPref.sys.mjsなど)に依存していません。

 

また、やり方その1で使用されているMultiRowTabLiteforFx.uc.jsは単体で動作するように設計されています。
やり方その1のMultiRowTabLiteforFx.uc.jsは、xPref.sys.mjsや他のモジュールに依存しません。

 

やり方その2:高機能?※xPref.sys.mjsが必要

https://github.com/alice0775/userChrome.js

の「userchrome.jsのインストール方法 方法 その2」と同じやり方というか

GitHub - xiaoxiaoflood/firefox-scripts: userChromeJS / autoconfig.js and extensions
userChromeJS / autoconfig.js and extensions. Contribute to xiaoxiaoflood/firefox-scripts development by creating an acco...

のやり方です。

 

やり方その2は

Quantum-Nox-Firefox-Customizations/Multirow and other functions at master ?? Izheil/Quantum-Nox-Firefox-Customizations
Customizations for Firefox. You can add extra functions using the CSS and JS files here. - Izheil/Quantum-Nox-Firefox-Cu...

を参考にしたやり方みたいですが、やり方その2がxPref.sys.mjsが必要なのは、おそらく1番の大元は

GitHub - xiaoxiaoflood/firefox-scripts: userChromeJS / autoconfig.js and extensions
userChromeJS / autoconfig.js and extensions. Contribute to xiaoxiaoflood/firefox-scripts development by creating an acco...

かと思います。

 

【インストールファイルおよびインストール場所】
C:\Program Files (x86)\Mozilla Firefox\config.js
C:\Program Files (x86)\Mozilla Firefox\defaults\pref\config-prefs.js
および
プロファイルフォルダ\chrome\userChrome.css
プロファイルフォルダ\chrome\MultiRowTabLiteforFx.uc.js
および
プロファイルフォルダ\chrome\utils\chrome.manifest
プロファイルフォルダ\chrome\utils\userChrome.js(旧:userChrome.jsm)
プロファイルフォルダ\chrome\utils\xPref.sys.mjs(旧:xPref.jsm)


 

やり方その2はchrome\utils\フォルダ内のuserChrome.jsがローダーの中心的な役割を果たしますが、chrome.manifestやxPref.sys.mjsと連携して動作します。

 

chrome.manifestはFirefoxにスクリプトやモジュールを認識させ、読み込ませるための設定ファイルです。

 

xPref.sys.mjsは主に特権的な設定 (Preferences) へのアクセスを提供するモジュールです。通常のabout:configでは変更できないようなFirefoxの内部設定を読み書きするために使われます。
特に多段タブ以外に様々な機能を同時に導入するためにxPref.sys.mjsが必要です。

 

やり方その2は多段タブ以外の色々な機能も導入する時の手順で、多機能になるぶん複数のモジュールを読み込む必要があります。
chrome.manifestを使うやり方その2では(やり方その1と比べて複雑になる代わりに)各スクリプトをモジュール化し管理しやすくするための比較的新しい・高機能なアプローチ方法です。

 

やり方その3:やり方その2より多くのファイルが必要

https://github.com/Merci-chao/userChrome.js#multi-tab-rows
【インストールファイルおよびインストール場所】

C:\Program Files (x86)\Mozilla Firefox\config.js
C:\Program Files (x86)\Mozilla Firefox\defaults\pref\config-prefs.js
および
プロファイルフォルダ\chrome\userChrome.css
プロファイルフォルダ\chrome\MultiRowTabLiteforFx.uc.js
および
プロファイルフォルダ\chrome\utils\chrome.manifest
プロファイルフォルダ\chrome\utils\userChrome.js(旧:userChrome.jsm)
プロファイルフォルダ\chrome\utils\xPref.sys.mjs(旧:xPref.jsm)
および
プロファイルフォルダ\chrome\utils\BootstrapLoader.js
プロファイルフォルダ\chrome\utils\RDFDataSource.sys.mjs
プロファイルフォルダ\chrome\utils\RDFManifestConverter.sys.mjs

 

やり方その3の手順はやり方その2より複雑というか、さらに高度なカスタマイズをサポートするために追加のモジュール(BootstrapLoader.js、RDFDataSource.sys.mjsなど)を使用しています、らしいです。
これらはFirefoxの内部APIやリソース管理を操作するためのもので、通常の多段タブ実装には不要です。

 

追加するファイルが増えるほどバージョンアップ時の不具合の確率も増えるため、やり方その1またはその2を選ぶのが安全・無難です。

 

以下、AIの回答です。

 

■やり方その3に関するAIの回答
AIにやり方その3について複数のAIに質問したら「特殊ケース以外では非推奨」との回答で、「特殊ケースって具体的に何?」とさらに質問したところ、
1.レガシーなFirefoxフォークの使用
2. 企業内レガシーシステムの維持
3. 歴史的なカスタマイズの継承
とのことです。

 

ここで言う「レガシーなFirefoxフォーク」とは、

  • 古いバージョンのFirefox
  • 古いバージョンのFirefoxの派生
の意味で、超古いバージョンのFirefoxおよびWaterfox・Pale Moon・Floorpなどのことです。

 

■■■やり方その3(RDF系?)■■■

項目詳細
メンテナンスコストRDF関連モジュールの開発が2010年代で停止しており、知識・ドキュメントが枯渇
互換性崩壊Firefox 102以降、XPCOM/RDF関連APIが段階的に削除されている
セキュリティ脆弱性非サポート技術の継続利用によるゼロデイ脆弱性のリスク上昇
 

■やり方その3が必要となる「特殊ケース」は、技術的レガシーがビジネス/運用上やむを得ない環境に限定されます。
2025年現在、一般ユーザーが方法3を選択するメリットはほぼなく、レガシー技術依存からの脱却が最優先課題と言えます。

以上はあくまで複数AIの回答のまとめです。

 

なお、上記AIの回答では、

  • Waterfox・Pale MoonなどのレガシーなFirefoxの場合はやり方3で多段タブが導入できる

とのことですが、そもそもやり方1でもWaterfoxで多段タブが導入可能です。

 

 

 

 

MultiTabRows@Merci.chao.uc.js について

■2025.7.24 追記■

以下、無駄に長文が続きます。
■2025.7.30 追記■ ごっそり削除しました。
ご興味ある方のみお読みください。

 

MultiRowTabLiteforFx.uc.js を使い続ける方には不要な内容です。

■2025.7.30 追記■
日本語での紹介ページができたそうです。

https://github.com/Merci-chao/userChrome.js/blob/main/README.jp.md
このコメント付近に私が書きました返信内容

何度もご紹介いただいて恐縮ですが、【やり方その3】ですね。



古いバージョンのFirefox用のやり方で、・・・

は、やり方次第では私の間違いでした。

 

多段タブの導入手順に関して、当サイトの考え方としては
やり方その3

https://github.com/Merci-chao/userChrome.js#multi-tab-rowsq

の導入手順はセキュリティ上オススメしませんが、上記ページとは違う導入手順で MultiTabRows@Merci.chao.uc.js 自体は導入できるみたいです。

 

つまり、
導入済みの「MultiRowTabLiteforFx.uc.js」を「MultiRowTabLiteforFx.uc.js.txt」とかにファイル名を変更する

MultiTabRows@Merci.chao.uc.js を追加

Firefoxを再起動

 

これだけで、MultiTabRows@Merci.chao.uc.js 自体は導入だけはできるみたいです。

 

場合によっては申し訳ありませんでした。

 

後述の手順で MultiTabRows@Merci.chao.uc.js を導入する場合は、現状のMultiRowTabLiteforFx.uc.js と同じレベルのセキュリティをキープしたまま MultiTabRows@Merci.chao.uc.js を導入することが可能です。

 

ここらへん、数百行削除しました。

   

■2025.7.30 追記■(【参考】[email protected] の多段タブを下に移動する

Merci chao様からのご指摘のコメントに従って、

 

私がuser.jsに追記した「間違った」書き方


//●[email protected]用
user_pref("checkUpdate", 0);
user_pref("checkUpdateFrequency", 30);
user_pref("dynamicMoveOverThreshold", true);
user_pref("gapAfterPinned", 0);
user_pref("maxTabRows", 30);

user_pref("spaceAfterTabs", 0);
user_pref("spaceBeforeTabsOnMaximizedWindow", 0);
user_pref("tabsbarItemsAlign", end);
user_pref("tabsUnderControlButtons", 0);

を「正しい」書き方


//●[email protected]用
user_pref("[email protected]", 0);
user_pref("[email protected]", 30);
user_pref("[email protected]", true);
user_pref("[email protected]", 0);
user_pref("[email protected]", 30);

user_pref("[email protected]", 0);
user_pref("userChromeJS.multiTabRows@Merci.chao.spaceBeforeTabsOnMaximizedWindow", 0);
user_pref("[email protected]", "end");
user_pref("[email protected]", 0);

と修正することで

  • ■不具合その1・・・多段タブの表示位置が最上部だけで、変更できない

の件以外は正常になったような気がします。

 

ただし、

user_pref("[email protected]", "end");

でも

user_pref("tabsbarItemsAlign", "end");

でも、どちらを user.js に記述したとしても
 tabsbarItemsAlign:end
は機能していません。

 

userChrome.cssに

/*■■■■■ MultiTabRows @Merci.chao.uc.js専用ここから ■■■■■ */
/*●多段タブをブックマーク ツールバーの下にする● */
#TabsToolbar {
    order: 100 !important;
}

を追記すれば、MultiTabRows @Merci.chao.uc.js でも多段タブをブックマークツールバーの下に移動することができます。

 

■2025.8.18 追記■
この記事内に私が書いたMultiTabRows @Merci.chao.uc.js に関する文章は本当はまだ数百行ありましたが、余計な指摘・誹謗中傷になりかねないので該当箇所はごっそり削除しました。

 

ごっそり削除したままだと意味不明なので、当たり障りない件だけ書きますと

  • 今まで私が使用していた MultiRowTabLiteforFx.uc.js は約4万文字(約900行)程度

であるのに対し、

つまり、Firefoxの挙動をごっそり修正していると思われ、影響範囲が大きいと予想されます。

 

また、

  • MultiRowTabLiteforFx.uc.js だったら userChrome.css で設定していた箇所は、[email protected] の場合は別途 about:config で設定・追加する必要がある。※user.js での設定は非推奨とのことです。

 

 

私のテスト環境(新しいプロファイルかつプラグイン・テーマは一切追加なし)で試した限りでは、バージョン3.3の[email protected] & Firefoxバージョン142にて、「タブの一覧を表示」ボタンを削除すれば多段タブ・ピン留めしたタブともに、たぶん問題なさそうでした。

 

about:configにて tabsAtBottom を「2」にすれば、上記

/*■■■■■ MultiTabRows @Merci.chao.uc.js専用ここから ■■■■■ */
/*●多段タブをブックマーク ツールバーの下にする● */
#TabsToolbar {
    order: 100 !important;
}

の記述も不要です。

 

私は MultiRowTabLiteforFx.uc.js を常用していて MultiTabRows @Merci.chao.uc.js は使っていませんので、この件は以上とさせていただきます。
m(_ _)m

結局どのやり方にすればいいの?

以下、8つのAIに聞いてみた回答のまとめです笑

 

■やり方その1

  • シンプルに多段タブだけを導入したい。
  • 余計な依存関係や複雑な設定を避けたい。
  • 軽量な実装で十分。
 

MultiRowTabLiteforFx.uc.js:依存モジュールなし、シンプルな多段タブ実装。
userChrome.js:単一スクリプトのロードに特化。TabMixPlusとの統合は困難(配置とローダーの違いによる競合)。

 

メリット:導入・設定が簡単、軽量。
デメリット:モダンなスクリプト(例: TabMixPlus)との互換性が低い。

 

■やり方その2

  • 他のカスタマイズ(例: TabMixPlusあるいはxiaoxiaofloodのスクリプト群)と組み合わせて使いたい。
    設定の動的変更(about:config操作)が必要なスクリプトを使用
    例: xiaoxiaofloodリポジトリのスクリプトや、モジュール化された実装を採用。
 

MultiRowTabLiteforFx.uc.js:xPref.sys.mjs依存、設定操作や追加機能を含む。
userChrome.js:複数スクリプトのロードをサポート。TabMixPlusと同居可能。※同じ機能の重複設定に注意

 

メリット:TabMixPlusとの互換性がある。
デメリット:依存モジュールが多く、設定がやや複雑。

 

■やり方その3

MultiRowTabLiteforFx.uc.js:高度なカスタマイズ、複数のモジュール依存。
userChrome.js:モジュール管理を強化。TabMixPlusとも統合可能だが複雑。

 

メリット:柔軟性が高い。
デメリット:依存ファイルが多く、不具合リスクが高い。

 

当サイトの見解の結論としては、

【やり方その1】
単に多段タブ(MultiRowTabLiteforFx.uc.js)だけ導入できれば良い場合
軽量なのが良い場合

 

【やり方そ2】
多段タブ(MultiRowTabLiteforFx.uc.js)とTabMixPlusを併用したい場合

ということになります。

 

当サイトのやり方は、やり方その1です。

 

やり方その1については、このページのやり方を参考にというか、このページにある各種ファイルをダウンロードして適切な配置をすれば超簡単かと思います。

 

やり方その2については、

https://github.com/alice0775/userChrome.js

のREADMEの箇所の「userchrome.jsのインストール方法 方法 その2」を参考に、各種導入してみてください。

 

【注意】多段タブとTabMixPlusを併用する場合

【多段タブのやり方その1】
多段タブのやり方その1ではuserChrome.jsの設定場所が
 プロファイルフォルダ\chrome\userChrome.js
です。

 

例、
C:\Users\●ユーザー名●\AppData\Roaming\Mozilla\Firefox\Profiles\●プロファイル名●\chrome\userChrome.js

 

【多段タブのやり方その2】および【TabMixPlus】
TabMixPlusおよび多段タブのやり方その2では
 プロファイルフォルダ\chrome\utils\userChrome.js
です。

 

つまり

【多段タブのやり方その1】:プロファイルフォルダ\chrome\userChrome.js
【多段タブのやり方その2】および【TabMixPlus】:プロファイルフォルダ\chrome\utils\userChrome.js

となります。

 

多段タブとTabMixPlus

GitHub - onemen/TabMixPlus: New Tab mix plus for modern Firefox
New Tab mix plus for modern Firefox. Contribute to onemen/TabMixPlus development by creating an account on GitHub.

の両方を併用したい場合は、多段タブのやり方その1では無理です。
やり方その2なら併用可能ですが注意が必要です。

 

■注意■
やり方その2なら多段タブとTabMixPlusを併用可能ですが、どちらもタブに関する機能が複数含まれていますので、同じ機能を両方で設定すると不具合のもとになる可能性が高いので注意が必要です。

 

読み込ませる各ファイルをファイラで開いてみて、まるっきり内容を理解することが難しい場合は、どちらか片方にしておくほうが無難です。

 

私は多段タブのやり方その1 + Tab Mix - Links

Tab Mix - Links – 🦊 Firefox (ja) 向け拡張機能を入手
Firefox 向け Tab Mix - Links をダウンロード。Tab browsing with an added boost.

です。

 

【番外編】Waterfoxについて

■Waterfoxについて■

2025.4.8時点で

  • Waterfox:6.5.6

なんですが、いつの間にかMultiRowTabLiteforFx.uc.js以外はFirefoxと同じで大丈夫になっていました。
多段タブはうまく機能していませんが、もうWaterfoxは使ってないので放置です。

 

放置するのも気になるので、
 Waterfoxのバージョン6.5.6はFirefoxで言うバージョンいくつなのか
ググって解決しました。

 

Waterfox G6.5.xシリーズは開発ブランチとしてはFirefox ESR 128への移行を進めているものの、G6.5.6時点での安定版リリースにおいてはFirefox ESR 115系のセキュリティアップデート (ESR 115.12.0相当) を取り込んでいる・・・みたいです。

 

firefox用スクリプトアップローダー内の「多段タブ.zip」
を検索して、
 日付:未確認
 コメント:Firefox128esr「MultiRowTabLiteforFx.uc.js」多段タブのスクリプトが(ry
の「多段タブ.zip」がWaterfoxのバージョン6.5.6でちゃんと動くことを確認しました。

   

私の環境では多段タブ・多段ブックマークツールバー・サイドバーの自動開閉の全て正常に動いていますが、私はもうWaterfoxは使っていませんので、もし今後Waterfoxで多段タブが動かなくなっても放置するかもしれません。
m(_ _)m

 

自分用メモ

インストールしているアドオン等については、「【たった1クリックのミス】Windows11再インストールの備忘録」のその他各種設定 → その他 → Firefox の箇所にとまとめてありますん!

 
この記事を書いた人

kaimonojyoz

Firefoxはかれこれ15年以上使っていて、Firefoxなしでは生きていけない体になってしまいました笑

 

アクアリウムは海水水槽のサンゴを全滅させた黒歴史からモチベーションがほぼゼロとなり、今に至ります。

 

1番長く生きてるお魚はカクレクマノミとゴールドナゲットマロンで、もうすぐ10年になります。

guest
22 Comments