「userChrome.js」カテゴリーアーカイブ

Firefoxの「すべての表示したページの履歴」を1発で消す.uc.xul

ucjs_clear_history

動作確認

キャッシュを消すやつ作ってたらこれもあったらいいんじゃないかってことです。
「表示したページの履歴」としてますが「ダウンロード履歴」も消えます。わりと適当です。

あと履歴が多いと消すのに時間が掛かってFirefoxが固まります。

ダウンロード: clear_all_page_history.uc.js for Firefox 27

ダウンロード: clear-all-history-fx50.uc.xul for Firefox 50

  • 2017.01.05 Firefox 50でも動くように書き直し
<?xml version="1.0" encoding="UTF-8"?>
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript"><![CDATA[
var ucjsHistoryClear = function() {
    try {
        PlacesUtils.history.clear();
    } catch (e) {
    }
}
]]></script>
<menupopup id="menu_ToolsPopup">
    <menuitem id="menu_ucjsHistoryClear"
              label="表示したページの履歴を消去"
              oncommand="ucjsHistoryClear()"/>
</menupopup>
</overlay>

タブの一覧表示メニュー(#alltabs-popup)のミドルクリックでタブを閉じる.uc.js

動作確認

たまにタブを開きすぎてどうにもならないことがあるので一覧表示メニューから閉じられたら便利そうだと思いまして。
#alltabs-popup > menuitem には menuitem.tab というのがあってそれでタブ操作がしやすくなってます。

ダウンロード: middle-click-close-tab-in-alltabs-popup.uc.js

セキュアなサイトでURLバーの背景色を変えるやつ.uc.js

動作確認

緑色の鍵マーク表示するだけじゃ分かりづらい!
と感じてuserChrome.cssである程度指定できていたのがFirefox 38あたりから使えなくなったので、鍵アイコン(identity-box)と同じような属性持ってきてCSSで背景色を変更してます。
XPCOMなのでそのうち使えなくなります。

HTTPS: 青っぽくする
url_ssl

HTTPS (EV SSL): 緑っぽくする
url_evssl

混在コンテンツ: 黄色っぽくする
url_mixed

ダウンロード: secure-site-urlbar-color.uc.js

// テーマによっては変になるかもしれないのでこの部分の色を変更するといいかもしれない
var colors = {'insecure': '#fff', 'secure': '#def0f7', 'ev': '#def2d7', 'broken': '#ffffdd'},

検索バーのマウスホイールスクロールで検索エンジンを切り替えるやつ.uc.js

wheel_search

動作確認

検索バー上のホイールスクロールで検索エンジン切り替えるだけです。
Firefox 43以降では検索エンジンのアイコンも変えるようにしてます。

ダウンロード: wheelscroll-to-change-search-engine.uc.js
GitHub: wheelscroll-to-change-search-engine.uc.js

UserScriptLoader.uc.jsの@requireが動かない

@requireでjQueryやunderscore.jsを読み込んでるユーザースクリプトを使うとき、requireディレクトリにキャッシュがない場合、saveURI()で失敗するようになってます。
調べるとFirefox 36以降でパラメータが増えてるのが原因っぽいです。

void saveURI(
  in nsIURI aURI,
  in nsISupports aCacheKey,
  in nsIURI aReferrer,
  in long aReferrerPolicy,
  in nsIInputStream aPostData,
  in string aExtraHeaders,
  in nsISupports aFile,
  in nsILoadContext aPrivacyContext
);

ということで wbp.saveURI(uri, null, null, null, null, aFile, null); となってる箇所の4番目(in long aReferrerPolicy)に null を追加すると保存されます。

	wbp.persistFlags = Ci.nsIWebBrowserPersist.PERSIST_FLAGS_BYPASS_CACHE;
	wbp.persistFlags |= Ci.nsIWebBrowserPersist.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION;
	wbp.saveURI(uri, null, null, null, null, null, aFile, null);
	USL.debug("getContents: " + aURL);

同じようにメニューのSave Scriptをクリックしたときに保存できないのもsaveURIのパラメータが足りないからです。
こんな感じで null 追加。

			var loadContext = win.QueryInterface(Ci.nsIInterfaceRequestor)
				.getInterface(Ci.nsIWebNavigation)
				.QueryInterface(Ci.nsILoadContext);
			wbp.saveURI(uri, null, uri, null, null, null, fp.file, loadContext);

XPCOM廃止するとか言ってんのに今さら仕様変更すんなよ……。

Firefoxのブックマークツールバーにあるフォルダをマウスオーバーで開くだけ.uc.js

動作確認

フォルダ開くのに1クリックすら面倒くさい。
そんな感じでしたがマウスオーバーで開くと逆に鬱陶しく感じるようになって使ってないので動作確認しただけです。

ダウンロード: mouseover-open-bookmark-folder.uc.js
GitHub: mouseover-open-bookmark-folder.uc.js

「キャッシュを消す」メニューを追加する (Firefox 34, HTTP cache v2).uc.xul

clear-cache-v2

動作確認

2014年8月ぐらいにHTTP cache v1 API disabledとなってたようで、以前書いたキャッシュを消すスクリプトだとFirefox 32以降の HTTP cache v2 API (cache2フォルダに保存されてるやつ)に対応できてなかったので作り直しました。

.uc.jsじゃなくて.uc.xulになってますが document.createElement(‘menuitem’) とか書いてるのが面倒臭くなっただけです。

基本機能はツールメニューに「キャッシュを消去」を追加するだけです。

Firefox ESR 31でもabout:configでHTTP cache v2を使うようにすればいけます。

ダウンロード : clear-all-cache-v2.uc.xul
GitHub : clear-all-cache-v2.uc.xul

<script type="application/x-javascript"><![CDATA[
var ucjsCacheClear = function() {
    var cacheSS = Cc["@mozilla.org/netwerk/cache-storage-service;1"].getService(Ci.nsICacheStorageService);
    try {
        cacheSS.clear();
    } catch (e) {
    }
    // Vimperator
    var liberator = document.getElementById("liberator-message");
    if (liberator) {
        liberator.value = 'キャッシュ消去';
    }
}
]]></script>
<menupopup id="menu_ToolsPopup">
    <menuitem id="menu_ToolsCacheClear"
              label="キャッシュを消去"
              accesskey="c"
              oncommand="ucjsCacheClear()"/>
</menupopup>

タブを閉じたとき直前に開いていたタブにフォーカスするだけじゃなくなった.uc.js

動作確認

そんなアドオンあったのですが自分が使いたい動作じゃなかったので作ってるとやたら機能が増えて困ってしまったやつ。

開いたり選択するとタイムスタンプを更新していって閉じたときに直前に開いていたタブにフォーカスするというのが基本動作ですが、未読タブがあるときは未読を優先的にフォーカスします。

追加機能としてタブバー上のShift+マウスホイールでタイムスタンプ順に切り替えます。
ただのマウスホイールで普通に切り替えるアドオンとかありそうなのでShift付きです。

さらに、タブ関係のアドオン入れてなくてどのタブが未読か分からなかったので自前でCSS付け足すことも可能になったり、既読タブにもう一度未読属性付け直したりもできます。
flt-unread
CSSサンプルは未読に赤い線付けるような感じです。テーマによってズレまくるので分かる人向け。
簡単に太字とか色を変える程度でも十分ではと。

prefs.jsで新規タブはバックグラウンドで開くようにしてるので(“browser.tabs.loadInBackground”, true)、未読だけ見たいときにそのタブを開いた順番(ここだけ逆順)にフォーカスしていきます。作り込みが甘いので未読関係のは変な動作するかもしれません。

あと、Session store APIを使ってタイムスタンプ等を保存してるのでFirefoxを閉じてもセッション情報が残ってたらタブを開いた順番や未読も次回に持ち越しできます。

セッションを自動で保存するアドオン Session Manager との併用もたぶん大丈夫っぽいです。

ダウンロード: focus-last-tab.uc.js
GitHub: focus-last-tab.uc.js

最近の修正内容とか

検索エンジンメニューのミドルクリックで検索エンジンを切り替えてさらに貼り付けて検索.uc.js

select-and-paste-and-search
この検索エンジン選ぶメニューのミドルクリックです。分かりづらいです。

動作確認

「検索エンジン切り替え→貼り付けて検索」をするのに「クリック(メニュー出す)→クリック(検索エンジン選択)→右クリック→貼り付けて検索」とわりと手間が掛かるのでそこ一気にやってしまおうというやつです。

ノリで作ったのであまり確認してません。
たぶん同じmenuitem.labelがあると最初のやつになるような気がします。

すでに検索エンジン選択したあとだったら検索エンジンのアイコンをそのままミドルクリックするだけで貼り付けて検索します。

ダウンロード: search-engine-select-and-paste-and-search.uc.js
GitHub: search-engine-select-and-paste-and-search.uc.js

最近の修正内容とか

検索バーを自動でリセットする.uc.js として動作するはずだった

動作確認

検索開始したら2秒後ぐらいに一番上の検索エンジンに戻してキーワードクリアします。それだけです。

Firefox 34で動かなかったので作り直しました。それぞれaddEventListenerでみてるので修正しやすくなったのではと思います。

※動かないみたいなんでファイル消してます。git cloneでもしてください。

ダウンロード : auto-reset-searchbar.uc.js

更新した履歴

  • 2014.12.10 やっぱり動かないらしいです。自分しか使えないなら意味ないので消しました
  • 2014.12.10 デフォルトで2秒後にリセット、検索バーにフォーカスしてもタイマー止めない
  • 2014.12.09 定数名にプレフィックス
  • 2014.12.09 最初の定数でどの場合にリセットするか
  • 2014.12.09 Firefox 34で動かないので作り直した
  • // このへんを true / false 入れ替えたり タイマー(ミリ秒)の時間を変えるといいかもしれん
    
    (function() {
        // リセットするまでにちょっと時間をおくかどうか [true=タイマー使う, false=即時クリア]
        const ARS_USE_TIMER = true;
        // リセットするまでの時間(ミリ秒) [3000=3秒]
        const ARS_TIMER_MS  = 2000;
        // 検索したら一番上の検索エンジンに戻すかどうか [true=戻す, false=そのまま]
        const ARS_USE_DEFAULT_ENGINE = true;
        // リセットタイマーが動いてるときに検索バーにフォーカスでタイマーを止めるかどうか [true=止める, false=止めない]
        const ARS_USE_FOCUS = false;
        // 検索ボタンクリックでクリアするかどうか [true=クリア, false=そのまま]
        const ARS_USE_CLICK = true;
        // 貼り付けて検索のときにクリアするかどうか [true=クリア]
        const ARS_USE_COMMAND = true;
        // Enterキーで検索のときにクリアするかどうか [true=クリア]
        const ARS_USE_ENTER = true;