Firefox の新規プロファイルを作ってから約 1 ヶ月。やっとカスタマイズが一段落ついた。

ついでなので、メモも兼ねてここに色々と記しておく。やたら長いから気を引き締めて。ちなみに、これで 1 日潰れた。

user.js

基本的に about:config を開いて、そこで設定値を変更して動作確認してから user.js に書き込む。こいつに色々と書き込んで設定*1しておくと、新規プロファイル作成時に user.js をコピーしてくるだけで、基本設定*2が終わってしまうという素晴らしさ。

以下は中身。

/* ===== UI ====================================*/ // XULアプリのエラーを表示(デバッグ用) //user_pref("javascript.options.strict", true); //user_pref("javascript.options.showInConsole", true); // ソースの表示でシンタックスハイライトを有効にするか user_pref("view_source.syntax_highlight", true); // ソースの表示で長い行を自動的に折り返すか user_pref("view_source.wrap_long_lines", true); // メニューのアクセスに対応するキーコードは何か(18:Alt) user_pref("ui.key.menuAccessKey", 18); // アクセスキーでメニューにフォーカスするか user_pref("ui.key.menuAccessKeyFocuses", true); // メニューのアクセスキー表示の扱い(文字列) // true : 常にラベルの後ろに表示 // false: ラベルにアクセスキーと同じアルファベットがあると下線で、無い場合はラベルの後ろに表示 // 0 : アクセスキーを無効(だっけ?) user_pref("intl.menuitems.alwaysappendaccesskeys", "false"); // ロケーションバーの移動ボタンを消去するか user_pref("browser.urlbar.hideGoButton", true); // ロケーションバークリックで全て選択するか user_pref("browser.urlbar.clickSelectsAll", true); // ロケーションバーからBrowse By Name user_pref("keyword.URL", "http://www.google.com/search?ie=UTF-8&sourceid=navclient&gfns=1&q="); // 上記のkeyword.URLを使用するか user_pref("keyword.enabled", true); // BackSpaceキーの動作(Shift+BackSpaceで逆の動作) // 0: ページの履歴を戻る // 1: ページをスクロールアップ // 2: 何もしない user_pref("browser.backspace_action", 2); // 1行テキストボックスに改行を含む文字列を張り付けするときの動作を設定 // 0: 改行も含めてそのまま貼り付ける(Linux でのデフォルト) // 1: 最初の行だけを貼り付ける(Linux 以外のデフォルト) // 2: 改行をスペースに置き換える // 3: 改行を削除する // 4: 改行をコンマに置き換える user_pref("editor.singleLine.pasteNewlines", 2); // クリック予想先を先読みするか user_pref("network.prefetch-next", false); // フォームや検索バーに入力した情報を保存するか user_pref("browser.formfill.enable", true); // 複数のタブを開いているときにブラウザを閉じようとした場合、確認するか user_pref("browser.tabs.warnOnClose", false); // throbber をクリックしたときに読み込まれるページの URL(複数不可) user_pref("browser.throbber.url", "about:config"); // フォントの最小サイズ user_pref("font.minimum-size.ja", 12); // オートスクロールを有効にするか user_pref("general.autoScroll", true); // スムーズスクロールを有効にするか user_pref("general.smoothScroll", false); // 入力フィールドでのスペルチェック(辞書を導入している場合のみ) // 0: 無効 // 1: 複数行フィールド(デフォルト) // 2: 複数行・1行フィールド user_pref("layout.spellcheckDefault", 2); // ブックマークマネージャのブックマークをどのようにソートするか // descending: ソートしない // natural: アルファベット順に昇順 A-Z // ascending: アルファベット順に降順 Z-A user_pref("browser.bookmarks.sort.direction", "descending"); /* ----- マウスホイール ------------------------*/ // withnokey : キーなし // withaltkey : Alt // withcontrolkey: Ctrl // withshiftkey : Shift // withmetakey : Win?? // どの種類の動作をするのか // 0: numlines プロパティで与えられる行数単位で文書をスクロールする // 1: 一ページ単位で文書をスクロールする // 2: 履歴を戻る/進む // 3: テキストを大きく/小さくする user_pref("mousewheel.withnokey.action", 0); // スクロールする行数の単位はいくつか user_pref("mousewheel.withnokey.numlines", 5); // スクロールする行数の単位を決めるのにシステムのプロパティを使用するか user_pref("mousewheel.withnokey.sysnumlines", false); // スクロールバー上での中クリックでその位置まで一気にスクロールするか user_pref("middlemouse.scrollbarPosition", true); /* ----- favicon -------------------------------*/ // そのサイトが設定していなくてもfavicon.icoを読みに行くか user_pref("browser.chrome.favicons", true); // そのサイトで設定したfaviconを読みに行くか user_pref("browser.chrome.site_icons", true); // ツールバーでfaviconを表示するか // 0: 常に非表示 // 1: キャッシュから表示 // 2: 常に表示 user_pref("browser.chrome.load_toolbar_icons", 1); // 何ピクセルまでの画像がタブ(またはロケーションバー)にサムネイル表示されるのか // (画像を直接開いたときにサムネイル化しないように) user_pref("browser.chrome.image_icons.max_size", 16); /* ----- ダウンロード --------------------------*/ // アラート表示の1フレームに変えるピクセルの大きさ [デフォルト値:1] user_pref("alerts.slideIncrement", 3); // アラート表示の1フレームを表示する時間(単位:ミリ秒) [デフォルト値:10] user_pref("alerts.slideIncrementTime", 30); // アラートを表示する時間(単位:ミリ秒) [デフォルト値:4000] user_pref("alerts.totalOpenTime", 1500); // ダウンロードマネージャから消去するタイミング // 0: ダウンロード正常終了時 // 1: ブラウザ終了時 // 2: デフォルト - 自動削除しない user_pref("browser.download.manager.retention", 1); // ダウンロード開始時にマネージャを表示するか user_pref("browser.download.manager.showWhenStarting", false); // ダウンロード完了時にアラートを表示するか user_pref("browser.download.manager.showAlertOnComplete", true); /* ----- ページ内制御 --------------------------*/ // ページ内アクセスキーをAltで機能させる user_pref("ui.key.generalAccessKey", 18); // 読み込んだ画像に表示領域に合うように縮小するか user_pref("browser.enable_automatic_image_resizing", false); // 点滅効果を有効にするか user_pref("browser.blink_allowed", false); // 右クリック禁止させないか user_pref("nglayout.events.dispatchLeftClickOnly", true); // marquee(文字のスクロール表示)を有効にするか(効果が無い?) user_pref("browser.display.enable_marquee", false); // フレームを常にリサイズ可能にするか user_pref("layout.frames.force_resizability", true); // エラーの表示をダイアログからエラーページに変更するか user_pref("browser.xul.error_pages.enabled", true); /* ===== タブ制御 ==============================*/ // ブラウザの起動時に開くページ // 0: 空白 // 1: ホームページ // 2: 最後に表示していたページ // 3: 最後に開いていたタブ全部 user_pref("browser.startup.page", 3); // 新規タブの内容 // -1: ブラウザの起動ページ // 0: 空白 // 1: ホームページ // 2: 最後に訪れたページ user_pref("browser.tabs.loadOnNewTab", 0); // タブが1つの時にタブバーを隠す user_pref("browser.tabs.autoHide", false); // タブの閉じるボタンの表示 // 0: アクティブなタブだけ表示 // 1: すべてのタブに表示 // 2: すべてのタブに非表示 // 3: 一番端っこに表示 user_pref("browser.tabs.closeButtons", 2); // タブを閉じた時、元のタブにフォーカスするか(あまり効果が無い) user_pref("browser.tabs.selectOwnerOnClose", true); // タブ復元の記憶数 user_pref("browser.sessionstore.max_tabs_undo", 25); // リンクを中クリックしたときにタブで開くか user_pref("browser.tabs.opentabfor.middleclick", true); // アドレスバーから新しいタブで開くか user_pref("browser.tabs.opentabfor.urlbar", true); // 検索バーの結果を新しいタブで開くか user_pref("browser.search.openintab", true); // 新しいタブをバックグラウンドで開くか user_pref("browser.tabs.loadInBackground", false); // 新しいタブでブックマークを開くとき、そのタブはバックグラウンドで開くか user_pref("browser.tabs.loadBookmarksInBackground", false); // ブックマークフォルダを開く場合にタブを置き換えるか user_pref("browser.tabs.selectOwnerOnClose", false); // タブ・ウィンドウに関する詳細オプションを表示する user_pref("browser.tabs.showSingleWindowModePrefs", true); // 外部アプリケーションからのリンク挙動 // 1: 現在のタブ(ウィンドウ)に開く // 2: 新しいウインドウで開く // 3: 新しいタブで開く user_pref("browser.link.open_external", 3); // 新しいウインドウを開くリンクの挙動(JS含む) // 1: 現在のタブ(ウィンドウ)に開く // 2: 新しいウインドウで開く // 3: 新しいタブで開く user_pref("browser.link.open_newwindow", 3); // 新しいウィンドウの制限を変更 // 0: 新しいウィンドウをすべて現在のタブ(ウィンドウ)または新しいタブに開く // 1: JavaScript によって開かれるウィンドウは対象外とする // 2: サイズ・位置・ツールバーの指定が含まれる JavaScript ウィンドウは対象外とする user_pref("browser.link.open_newwindow.restriction", 0); /* ===== Find As You Type ======================*/ // Find As You Type を有効にするか user_pref("accessibility.typeaheadfind", true); // 文字入力を始めた途端、Find As You Type を自動的にスタートするか // false (デフォルト) の場合、検索の前に / (テキスト検索) か ' (リンク検索) キーを押す user_pref("accessibility.typeaheadfind.autostart", true); // 通常のテキストを検索しないか user_pref("accessibility.typeaheadfind.linksonly", false); // 必ずリンクから検索を始めるか user_pref("accessibility.typeaheadfind.startlinksonly", false); // キーストロークの監視を止めるまでの時間をミリ秒で設定 user_pref("accessibility.typeaheadfind.timeout", 5000); // デフォルト:3000 /* ===== JavaScript ============================*/ // ウィンドウを移動させたり、大きさを変更させたりしないようにするか user_pref("dom.disable_window_move_resize", true); // ウィンドウをリサイズ不可能にするか user_pref("dom.disable_window_open_feature.resizable", true); // ウィンドウを最小化不可能にするか user_pref("dom.disable_window_open_feature.minimizable", true); // ウィンドウのメニューを隠さないか user_pref("dom.disable_window_open_feature.menubar", true); // ウィンドウのアドレスバーを隠さないか user_pref("dom.disable_window_open_feature.location", true); // スクロールバーを無効にしないか user_pref("dom.disable_window_open_feature.scrollbars", true); // ステータスバーを隠さないか user_pref("dom.disable_window_open_feature.status", true); // ステータスバー内のテキストを設定できないようにするか user_pref("dom.disable_window_status_change", true); /* ===== 拡張 ==================================*/ /* ----- ConQuery ------------------------------*/ // ConQueryもどきで新しいタブを開くか user_pref("userChrome.conqueryModoki.newTab", true); // ConQueryもどきで検索後、検索語を消去するか user_pref("userChrome.conqueryModoki.clearAfter", true); // ConQueryもどきで選択文が無いときプロンプト表示するか user_pref("userChrome.conqueryModoki.promptNotSelected", true);

設定項目などは下記のリンクを参考に。

拡張

導入している拡張機能。

C+ 言語(だっけ)で書き直されたもの。随分と軽い。その代わり、 $link や $image などの変数はない。つまりテキスト広告は消せない(はず)。

正規表現対応版を使用してるけど、私はフィルタに正規表現を使用していない。理由は正規表現に対応してないバージョンから設定値を引き継いだから。あと、重くなるし。

以下は設定値。インストールしたら about:config に extensions.adblock++.filter というキーが出来るので、それの値にぶっこむ。

<>.99bb.com/<>.aaa.livedoor.jp/curio<>.aaa.livedoor.jp/less.gif<>.aaa.livedoor.jp/minibanner.gif<>.afl.rakuten.co.jp/<>.bannerbridge.net/<>.csj.co.jp/<>.custom-click.com/<>.duga.jp/<>.googlesyndication.<>.html?affid=<>.melma.com/img/<>.st98.arena.ne.jp/ba/<>.the-koukoku.com/<>.tok2.com/ban/<>.trafficgate.net/<>.valueclick.ne.jp/<>/adclick<>accesstrade.net/at/<>ad_image<>adclick/<>adcouncil/<>adjustnetwork.com/<>afl.rakuten.co.jp/<>ads.mixi.jp/<>alc.co.jp/ejrparts/be/<>as.casalemedia.com/sd<>clickad?<>grp01.ias.rakuten.co.jp/<>http://203.216.140.34/<>http://210.155.151.248/<>http://ad.<>http://adlog.com.com/adlog/<>http://adnet.asahi.com/<>http://adng.ascii24.com/<>http://ads.<>http://adserver.<>http://affiliate.<>http://ai.yimg.jp/bdv<>http://amazie.jp/swf/<>http://bakuro.monoshiri.com/images/bnr/<>http://banner.<>http://bc.geocities.yah<>http://bizad.nikkeibp.co.jp/<>http://blogbattler.com/js/blogbattler.js<>http://blogbattler.com/noscript.gif<>http://bn.goo.ne.jp/<>http://cash.ee-life.tv/<>http://click.adv.livedoor.com:80<>http://ekitan.com/ad<>http://gigazine.biz/images/<>http://haishinxx.oopsweb.tv/<>http://harbox-harbot.so-net.ne.jp/<>http://image.adv.livedoor.com/<>http://image.excite.co.jp/jp/sa/<>http://image.excite.co.jp/ng/<>http://image.itmedia.co.jp/fil/<>http://img.bbchat.tv/<>http://img.dell.com/images/jp/banners/<>http://img.sbpnet.jp/adimage.php<>http://img.xrea.com/<>http://livechatcafe.com/img/<>http://mac.page.ne.jp/??/<>http://ngs.impress.co.jp/<>http://v211.jorudan.co.jp/<>http://visit.geocities.jp/<>http://www.accesstrade.net/<>http://www.adserver.jp/<>http://www.affiliated.jp/<>http://www.b-click.net/<>http://www.banner-kokuku.com/<>http://www.blogpet.net/js/<>http://www.coneco.net/sale/<>http://www.cyberclick.net/<>http://www.dclick.jp/<>http://www.dell.com/html/jp/images/special/banners_?/<>http://www.dual.co.jp/images/<>http://www.express.nec.co.jp/info/image/<>http://www.fresheye.com/iframe_ad/<>http://www.geocities.co.jp/images/geoguide/<>http://www.geocities.com/js_source/<>http://www.hatena.ne.jp/banner/<>http://www.jp.sonystyle.com/Sspp/<>http://www.kakaku.com/brand/images/<>http://www.kakaku.com/prdsearch/image/<>http://www.naitai-affili.com/alm/<>http://www.zakzak.co.jp/banner/<>indieclick.com/adimage.php<>jp.ap.valuecommerce.com/<>omany.tv/<>pagead/imgad<>rcm-jp.amazon.co.jp<>sbs.nsk-sys.com/<>trafficgate.net/t/<>w1.ax.xrea.com/

主に del.icio.us にポストする為に使ってる。自動で URL と Description は入力され、ページ内文字列を選択状態ならば、それは Extended に入力される。

タグの設定に、自分のタグ一覧と自分のタグ一覧からページ内容にマッチしそうな予測タグ一覧、他のユーザーの代表的なタグから選ぶことが出来る。手動入力すれば、それらからマッチしたものが候補にあがり入力の手間が省ける。が、これが使いにくい。候補にあがる場所が 1 行ボックスだからか、候補の 2 番目以降を選ぶにはクリックしか手段が無い*3。候補からの決定はタブで、間違えてエンターを押そうものなら、途中までの入力でポストしてしまう。

あと、起動が遅い(つまりは重い)。

標準で入っている*4。何かの製作者には強い見方。

ダウンロード項目をステータスバー上に表示する。ミニサイズまじお勧め。

DOM Inspector の強化版のようなもの。ただし、ページに対してのみ(だと思う)*5。ぶっちゃけ、使いこなせない。けど便利。何かを作る人向け。

外部ダウンロードツールと連携させる。容量の大きなファイルを落とすときに。ちなみに私は FlashGet を使っている。

名前の通り、 Gmail の(複数)アカウントを管理してくれる。通知という方があってる気もする。

見ているページを(望むのなら新しいタブに) IE コンポーネントを用いて開く。 IE でしか(正しく)表示できないページ*6を見るときや、何かを作る人が IE で確認する時などに。正直、要らん。

link 要素に対応するツールバーボタンを提供する。割とどうでもいい。

ページのプロパティとサイドバーに Firefox が行っている HTTP 通信を表示する。何かを作る人向け。

ロケーションバーの表示を拡張する。それ以外にもディレクトリ移動を簡単にしてくれる。

拡張・テーマのインストール時に対応バージョンを無視したりディレイを無くしたり。アドオンの表示をスリムにしたり並べ替え出来たり。エラーコンソールや再起動などのツールバーボタンを提供したり。

表示しているページを PNG 画像として保存できる。表示部分のみ、ページ全体を選べる。

1 行入力欄・複数入力欄・インラインフレームをリサイズ出来るようにする。何気に便利。というか、ユーザースクリプトでいいんじゃないかと…。

そのページ(サイト)に代替スタイルシートがあれば、それを選択できるようになる。スタイルを無効にも出来る。 Firefox 標準のそれとは違ってページ変移しても維持される。そしてそれは保存される。

無くてもいいけど、そのサイトが代替スタイルを提供している事に気付かせてくれるので入れている。

ユーザースタイルシートを管理してくれる。個人的に必須。 userstyles.org からインストールしたものはアップデートにも対応してる*7。

自分で書いたものをちょいと紹介。

Web Page Fix

@namespace url(http://www.w3.org/1999/xhtml); body { font-family : "Lucida Sans Unicode" ; line-height : 1.5 ; letter-spacing : 1px ; }

何の参考にもならん…。

UI Fix

@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); #personal-bookmarks toolbarbutton > label { display : none !important ; } . search-go- button -stack { display : none !important ; } . tabbrowser-tab [ selected = "true" ] { font-weight : bold !important ; } . tabbrowser-tab:not([selected="true"]): hover , . tabbrowser-tab:not([selected="true"]): hover . tab- text { text-decoration : underline !important ; cursor : pointer !important ; } #context-back , #context-forward , #context-reload , #context-stop , #context-sep-stop , #context-searchselect , #context-sendlink , #context-sendpage , #context-sendimage , #context-sep-open , #context-openlink , #context-openlinkintab , #context-bookmarklink , #context-sep-viewbgimage , #context-viewbgimage , #context-copyimage-contents , #context-setDesktopBackground , #context-blockimage , #context-bookmarkpage , #context-savepage , #context-selectall , #context-keywordfield , #spell-check-enabled , #spell-add-dictionaries-main , #spell-dictionaries , #spell-separator , #context-sep-bidi , #context-bidi-text-direction-toggle , #context-bidi-page-direction-toggle { display : none !important ; }

使わないコンテキストメニューを消せるのが素晴らしく良い。

Talkback

標準で入ってる。クラッシュした時に情報を提供する。

英語辞書。辞書とは名ばかりで、ただのスペルチェック。入力フィールドで、入力ミスと思われる単語にアンダーラインを引いてくれる。他の言語も多くある。英語で文章を入力する機会がある方に。

Chrome 権限で JavaScript を動かせるようになる。神拡張。最早、これ無しでは Firefox を使えないかもしれない。ある程度の拡張は全てこれでまかなえる。そして軽い。 UI は全く無いので、管理は全て自分自身で行う必要があるし、ある拡張と競合して予期せぬ動作をする事もあるし、環境に依存するスクリプトもある。ある程度 JavaScript が読める人向け。

それよりも userchrome.org はまだかな。かな。

使用している userChrome スクリプトは後述する。

テーマ

あまり種類は入れていないけど、気分によって変更することがたまにある。

使わないよね…。

デフォルトのキレイ目バージョンみたいな感じ? ほとんどのメニュー項目にアイコンがつくのが特徴。

rein

OS の配色を使用したテーマ。アイコンはモノクロで、シンプル。 Firefox 2.0 以上のバージョンでは対応していないが、人気が高く、有志が暫定対応バージョンを公開してる。欲しい人は検索を。

グレーベースのテーマ。アイコンもシンプル。選択(表示)タブが少しお洒落で、最近のお気に入り。

userChrome スクリプト

結構な数があるけど、これらの動作は軽快。

検索バーにあるものをコンテキストメニューから実行可能に。選択文字列をクエリにする。選択してない場合はプロンプトが出る。他に検索リストを階層化・罫線の追加などが出来る。

これがあれば検索バー要らないと思いきや、検索バーがないと動作しないみたい。残念。

拡張の Copy URL+ のようなもの。そのうち %RLINK% にも対応させるつもり。

プレビューというか、 Firefox が勝手に整形しないようにする。

FLV Downloader

この 2 をまとめたもの。コンテキストメニューからダウンロード出来るようになる。自動でファイル名をつけてくれて超便利。

YouTube の方は、コンテキストメニューの有効範囲をページ全体になるように改造している。

指定したマウスボタンを押しながらホイールを回すと、そのタブのページ履歴を移動できる。私は右ボタンを押しながらにしている。

デフォルトの左ボタンのまま使ってたら、指が攣りそうになったから。

ファイル・ツールなどのメインバーのメニューを、メニューという 1 つの項目にまとめる。作ってから気付いたけど海外サイトで同じのあったよ。

All-in-One Gestures の軽量版。マウスの軌跡は描けない(個人的には必要ない)。ホイールジェスチャ・ロッカージェスチャは共に使っていない。ホイールは History Scroller で使ってるし、ロッカーはページ読み込み時にマウスアップが検出できなくて意図した動作をしないから。

以下が使用しているジェスチャ定義。

case "L" : document .getElementById( "Browser:Back" ).doCommand(); break ; case "R" : document .getElementById( "Browser:Forward" ).doCommand(); break ; case "UD" : document .getElementById( "Browser:Reload" ).doCommand(); break ; case "UDU" : document .getElementById( "Browser:ReloadSkipCache" ).doCommand(); break ; case "DR" : document .getElementById( "cmd_close" ).doCommand(); break ; case "DL" : document .getElementById( "History:UndoCloseTab" ).doCommand(); break ; case "UL" : gBrowser.mTabContainer.advanceSelectedTab(-1, true ); break ; case "UR" : gBrowser.mTabContainer.advanceSelectedTab(+1, true ); break ; case "RU" : goDoCommand( "cmd_scrollTop" ); break ; case "RD" : goDoCommand( "cmd_scrollBottom" ); break ; case "U" : goDoCommand( "cmd_scrollPageUp" ); break ; case "D" : goDoCommand( "cmd_scrollPageDown" ); break ; case "LRL" : document .getElementById( "cmd_textZoomReduce" ).doCommand(); break ; case "RLR" : document .getElementById( "cmd_textZoomEnlarge" ).doCommand(); break ; case "DU" : document .getElementById( "cmd_textZoomReset" ).doCommand(); break ; case "RULD" : ( function () { var node = event .target; if (!(node instanceof HTMLImageElement)) return ; if (!node.hasAttribute( "width" )) node.setAttribute( "width" , node.naturalWidth); if (!node.hasAttribute( "height" )) node.setAttribute( "height" , node.naturalHeight); if (!node.hasAttribute( "originalWidth" )) { node.setAttribute( "originalWidth" , node.width); node.setAttribute( "originalHeight" , node.height); } node.width = node.width * 1.5; node.height = node.height * 1.5; } ()); break ; case "LURD" : ( function () { var node = event .target; if (!(node instanceof HTMLImageElement)) return ; if (!node.hasAttribute( "width" )) node.setAttribute( "width" , node.naturalWidth); if (!node.hasAttribute( "height" )) node.setAttribute( "height" , node.naturalHeight); if (!node.hasAttribute( "originalWidth" )) { node.setAttribute( "originalWidth" , node.width); node.setAttribute( "originalHeight" , node.height); } node.width = node.width * 0.5; node.height = node.height * 0.5; } ()); break ; case "RDLU" : ( function () { var node = event .target; if (!(node instanceof HTMLImageElement)) return ; if (!node.hasAttribute( "originalWidth" )) return ; node.width = node.getAttribute( "originalWidth" ); node.height = node.getAttribute( "originalHeight" ); } ()); break ; case "LU" : var uri = gBrowser.currentURI; if (uri.path == "/" ) return ; var pathList = uri.path.split( "/" ); if (!pathList.pop()) pathList.pop(); loadURI(uri.prePath + pathList.join( "/" ) + "/" ); default : throw "Unknown Gesture: " + this ._directionChain;

他にも軽量マウスジェスチャで利用可能なスクリプト集に色々と紹介されているので参考に。コメントもチェック!

Open Close Tab Position

上記をまとめたもの。新しく開くタブは現在のタブのすぐ右に、タブを閉じればすぐ左のタブにフォーカス。

ロケーションバーのコンテキストメニューに貼り付けて移動という項目を追加。ラベルは英語だけど、日本語に変更した。

話題になった Safari のページ検索のエフェクトを追加する。最初の検索だけ、適応されないよぅ*8。

Search Fix

2 ちゃんねるに投下されたスクリプトをまとめたもの。

( function () { var searchbar = document .getElementById( "searchbar" ); if (searchbar) { searchbar.handleSearchCommand_org = searchbar.handleSearchCommand; searchbar.handleSearchCommand = function (aEvent) { searchbar.handleSearchCommand_org(aEvent); this ._textbox.value = "" ; this ._textbox._displayCurrentEngine(); setTimeout( function () { var ss = Cc [ '@mozilla.org/browser/search-service;1' ] .getService(Ci.nsIBrowserSearchService); ss.currentEngine = ss.defaultEngine; } , 0); } } } )(); ( function () { var searchbar = document .getElementById( "searchbar" ); var textBox = document .getAnonymousElementByAttribute(searchbar, "anonid" , "searchbar-textbox" ); textBox.onTextEntered = new_onTextEntered; function new_onTextEntered(aEvent) { var evt = aEvent || this .mEnterEvent; if (evt && evt.keyCode == KeyEvent.DOM_VK_RETURN) { this ._getParentSearchbar().handleSearchCommand(evt); this .mEnterEvent = null ; } } } )();

コンテキストメニューにサイト内検索を追加する。というか、ドメイン内検索。選択文字列をクエリとする。選択してなければプロンプトが出る。新規タブで開く。

自分の勉強の為にも、要望のあったものを作って、入れっぱなし。個人的にはブックマークレットをキーワード設定して使えばいいと思う。

主にアップローダーにある misc.uc.js というスクリプト。これのおかげで、 Tab Mix Plus を捨てることが出来る。

環境依存する部分が結構ある。

あと、自分で書いたものとして、 Firefox 標準の最近閉じたタブ(Undo Close Tab)をコンテキストメニューの 1 番上に追加するものも混ぜてある。閉じたタブのリストは少し拡張してあって、リストに番号をふって、 1 番目から 10 番目までに 1 ~ 0 でアクセスキーを設定している。 Firefox 標準の関数を書き換えているので、恐らく Firefox 2.0 でしか動かない。

( function () { var contextMenu = document .getElementById( "contentAreaContextMenu" ); var menu = document .getElementById( "historyUndoMenu" ); menu.setAttribute( "disabled" , false ); menu.setAttribute( "accesskey" , "T" ); var sep = document .getElementById( "endUndoSeparator" ); contextMenu.insertBefore(sep,contextMenu.firstChild); contextMenu.insertBefore(menu,contextMenu.firstChild); eval( 'HistoryMenu.populateUndoSubmenu = ' + HistoryMenu.populateUndoSubmenu.toString() .replace( '("label", undoItems[i].title);' , '("label", i + 1 + ". " + undoItems[i].title);' ) .replace( '("value", i);' , '$& if (i < 10) m.setAttribute("accesskey", (i == 9) ? 0 : i + 1);' ) ); } )();

これもだが、書いてから海外サイトに同じものがあるのを発見した。恐ろしい事に書き方さえ違えど、やってる事が全く一緒という…*9。

User Agent Switcher という拡張と一緒。 Firefox の隠し設定(?)を利用してる。

Greasemonkey 互換の神スクリプト。アップローダーにあるパッチを当てると、さらに互換性アップ。当然ながら、 UI は無いに等しいが問題ない。

残念ながら livedoorReader 関係のユーザースクリプトは Permission denied to get property Function.__parent__ 等というエラーで動かない。ちょっぴり残念。

userscript

Greasemonkey で利用できるスクリプト。それほど多くは入れてない。と思う。

IE みたいに img 要素の alt 属性をツールチップ表示してくれる。具体的には title 属性が無いか空の場合に、 alt 属性を title 属性にコピーしてるだけ。

ページ終端付近に達すると、自動で次のページを読み込み、現在のページに付加してくれる。神スクリプト。検索結果など、さくさく読むことが出来る。対応サイトは続々増え続けている。使用者は通常これを意識しなくていい。

Disable HATENA keyword

はてなキーワードのリンクを無効にする。どうも製作者のサイトがなくなったようで、はてなグリースモンキーのページからも落とせない。

ちなみに @exclude に http://d.hatena.ne.jp/keyword/* と http://*g.hatena.ne.jp/keyword/* を追加しておかないと、はてなのヘルプが見れないという。

del.icio.us のリンク先サイトに favicon があればそれをアンカー語の前に表示する。

Flickr で写真一覧ページなどの n comments というリンクにホバーしたらコメント内容をポップアップしてくれる。

全角英数記号を半角に変換してくれる。気持ち悪い全角英数が消えるだけで幸せになれる。神スクリプト。

しかし、アスキーアートは心で見ることになる。

入れたものの使ったことが無いという…。名前からするに、検索クエリを保存しておいてくれるぽい。ページ左の連絡先の下に表示される。

ウェブ検索結果にページランクを表示する。 AutoPagerize に対応させた。

上記の元スクリプトに感謝。

どこでも Lightbox 風のエフェクトで画像を観覧できる。 Flickr や Google のイメージ検索にも対応。アクセスキーも設定されていて親切。

Right(→): 次の画像

Left(←): 前の画像

+: 拡大

-: 縮小

0: 原寸

x: 閉じる

Esc: 閉じる

Enter: 最初に選んだ画像

このスクリプトを導入してローカルの画像を入れたフォルダを開くだけで、簡易画像ビューワになる。素晴らしい。

Lightbox を使ってるサイトだと競合して何も起きなかったりするんだけどね。

ダイアリー、ブックマーク、アイデアのコメント内を自動リンク化します。 URLやid記法などに対応しています。

highlight referere

リファラを利用して検索結果から移動したページの検索語をハイライトする。便利。

配布先(?)がプライベートになっていて見れない。残念。

あるサイトへのリンクをハイライトする。スクリプト内に編集場所あり。

MP3 へのリンクの後ろに簡単な(それでいて十分な機能を持つ)プレイヤーを追加する。

Rebuild

userContent.js がスクリプトを読み込みしなおす。 Ctrl を押しながらダブルクリックで確認プロンプト。

userContent.js に同梱。

Greasemonkey ユーザーには何の意味も無いよ。

Google のウェブ検索結果に番号を振る。 AutoPagerize 対応。

ビュンビュン見ていくうちに、今自分がどの程度の位置にいるのか分かりにくくなるのを防ぐために。

TinyURL のリダイレクト先のアドレスをツールチップで表示する。