「Firefox」タグアーカイブ

Feedly Pro ($99) に申し込んだことだしゴミみたいなユーザースクリプトを作った

\Pro Plan/
feedly_pro

つい最近、Feedlyが月額$5の有料プランを先着5000人だったかで$99払えば生涯使えるというのをやってたので申し込んだのだけど、このプレミアム感のなさに驚愕してゴミみたいなユーザースクリプトを作った。

userscripts.org に絶対ありそうな広告エントリーやら必要なさそうなのを非表示にするやつの簡易版。

好んで使ってたDOMNodeInsertedが廃止予定らしく、MutationObserverというのを使ってるので古いブラウザだと全く動かないしエラーでます。
正直、MutationObserverが使いたかっただけ。

ダウンロード: feedly_filter.user.js

// ==UserScript==
// @name           Feedly Filter
// @description    広告エントリーを非表示にするしか能がない
// @include        http://cloud.feedly.com/*
// @include        https://cloud.feedly.com/*
// ==/UserScript==

(function() {
    var feedly = {
        titles: [
            /^(PR:|AD:|INFO:|【PR】)/i,
            /管理人のブックマーク/,
            /^ダイジェストニュース/,
            /bokete/
        ],
        urls: [
        ],
        observer: new MutationObserver(function(mutations) {
            mutations.forEach(function(mutation) {
                var elm = mutation.addedNodes[0];
                if (elm && elm.nodeName == 'DIV') {
                    feedly.filterEntry(elm);
              }
            });
        }),
        init: function() {
            // this.debug(' init()');
            this.observer.observe(document.body, {childList: true, subtree: true});
            window.addEventListener('beforeunload', this, true);
        },
        handleEvent: function(event) {
            if (event.type == 'beforeunload') {
                // this.debug(' disconnect()');
                this.observer.disconnect();
                window.removeEventListener('beforeunload', this, true);
            }
        },
        debug: function() {
            var i, l = arguments[0];
            for (i = 1; i < arguments.length; i++) {
                if (arguments[i]) l += ', ' + arguments[i];
            }
            unsafeWindow.console.log('[userscript][feedly_filter]' + l);
        },
        filterEntry: function(elm) {
            var a, i, title, read = false;
            if (!elm.className || !elm.className.contains('u0Entry')) return;
            a = elm.getElementsByClassName('title')[0];
            if (a.className == 'title read') {
                read = true;
            }
            title = elm.getAttribute('data-title');
            for (i = 0; i < this.titles.length; i++) {
                if (!this.titles[i].test(title)) continue;
                // this.debug('[hide] ' + title);
                this.hide(elm, read);
                break;
            }
        },
        hide: function(elm, read) {
            var div = elm.getElementsByClassName('condensedTools')[0],
                img, e;

            if (read) {
                elm.style.display = 'none';
                return;
            }
            if (!div) return;
            img = div.getElementsByTagName('img')[1];
            if (img.getAttribute('title') == 'Mark as read and hide') {
                e = document.createEvent('MouseEvents');
                e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                img.dispatchEvent(e);
            }
        }
    };
    feedly.init();
})();

FirefoxとかChromeで使えるAmazon Kindleストアの検索プラグイン作った

なんかデフォルトで入ってるAmazonのやつ使ったあとにKindleストアで検索しなおすのが面倒臭くて、それなら最初っからKindleストアのやつ作ればいいじゃん!ということです。

Kindleストア検索プラグインをインストール

中身こんなの

<?xml version="1.0" encoding="UTF-8"?>
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
<ShortName>Kindleストア</ShortName>
<Description>Kindleストア</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHgSURBVHjalFM9TNtQEP4cB7PwM1RITUXIgsRaYEEVEyKZwhiyZAQyd0BhpFOlIjoBqhjSqVQMoVMLLAjEwECCQJkSkBqJYDOAFOMKFSf28d7DTUxiUDnp/Pzeu/vuu7t3ICKF6SLTMv2/lB0fRWKfjwDm4JJisYh0Oo3fpZLYT0SjSCQS8JAFMADNDZ3NZsnf1taiqVTKi4nGASruk5lkkmTmMB6JUKFQqO+DfX1eABWeQoVR6f7HSdM0obqu48Yw8G1tDT82NsRd1TSbU9BbGPCog8PDj+jLzurFoAVgMh4XxoNDQ6SqKi0tL9eBvAB8zZwymYxYY7EYAoEA8vm82BNTg6XUIs0MeGTZoR1mhXSnwNl4pmAbjU7mcjkKhkL1ynMnntZ4OEw3VyrV8utk7s5TdW++0QXz+1i3P7IK36t+PCfVn1OQOoOA0gXr5DPak+cPXbBK+/T3S69AtY3LJ98vZ1or/iLr+pTuvr59/A6s003UdqZFJF/PCKQ3o5CUznoBST2AfbEF/9iqYEDaIfwj73VJPEfgNTe0tWNYR0uwy9uOW0OkrgHI7z5ADo2C7v48nLV3XHKAT+x/1m1sX58xsBxg8rZJrDYD8DHHp4aJj/MK09sXjPOt46PcCzAACXY8/u34wN0AAAAASUVORK5CYII=</Image>
<Url type="application/x-suggestions+json" method="GET" template="http://completion.amazon.co.jp/search/complete?method=completion&amp;search-alias=digital-text&amp;mkt=6&amp;q={searchTerms}"></Url>
<Url type="text/html" method="GET" template="http://www.amazon.co.jp/exec/obidos/external-search/">
    <Param name="mode" value="blended"/>
    <Param name="url" value="search-alias=digital-text"/>
    <Param name="lo" value="none"/>
    <Param name="field-keywords" value="{searchTerms}"/>
</Url>
<SearchForm>http://www.amazon.co.jp/</SearchForm>
</SearchPlugin>

GmailみたくShift+クリックでチェックボックスをまとめてチェックするGreasemonkeyスクリプト

動作確認
Firefox 15.0 + ユーザースクリプトを実行できるもの
(Greasemonkey or Scriptish or UserScriptLoader.uc.js 0.1.6.1)
Chrome 13.0.782.220

Shift+Clickで複数チェックのあれ便利なのでどこでも使いたいということで作ったGreasemonkeyスクリプト。
userscripts.orgに同じようなのあります。たぶんそっちの方が軽いのでおすすめです。

動作はGmailのと同じにしたかったので、jQueryプラグインのとShift押しっぱなしの動作が若干違うはずです。

<input type=”checkbox”> な要素を全部取得してるのでname属性が違ってもお構いなしです。
また、Ajaxなどで動的にinput要素が追加・削除されてる場合は希に変な感じでチェックされるかもしれません。

ダウンロード: shift_click_multiple_check.user.js

GitHub: shift_click_multiple_check.user.js

最近の更新内容
2012/08/30
64142ee XPathからquerySelectorAllに変更

動作テスト用:

Group1


Group2


Group3


Group4 (Label付き)

// ==UserScript==
// @name         shift+click multiple check
// @description  Shift+Clickで適当にまとめてチェック
// @namespace    http://oflow.me/archives/441
// @include      http://*
// @include      https://*
// @exclude      http://www.google.com/*
// @exclude      http://www.google.co.jp/*
// @exclude      https://www.google.com/*
// @exclude      https://www.google.co.jp/*
// @version      1.1
// @note         XPathからquerySelectorAllに変更
// @note         DOMNodeInsertedの所間違ってた…
// ==UserScript==

// Gmailのチェックボックスの動作をできるだけ再現
// 使いたいサイトでname属性が違うcheckboxの一覧があったのでいい加減にした
// 要素の並び方次第では予想と大幅に変わる可能性がある
// DOMNodeModified, DOMNodeRemovedはもちろん見てないのでおかしくなる可能性がある

(function() {
    var prevCheckbox = null, checkboxes = null, checkboxLength = 0;

    function init(doc, inserted) {
        if (doc.nodeType != 9 && !inserted) return;
        // 追加されたやつにcheckboxあるか確認する
        if (inserted && !doc.querySelector('input[type="checkbox"]')) return;

        var elms = document.querySelectorAll('input[type="checkbox"]');
        checkboxLength = elms.length;
        if (!checkboxLength) return;

        for (var i = 0; i < checkboxLength; i++) {
            if (elms[i].getAttribute('data-multiple-check')) continue;
            elms[i].setAttribute('data-multiple-check', 'true');
            elms[i].addEventListener('click', function(e) {
                if (e.button == 0) multipleCheck(e);
            }, false);
        }
        checkboxes = elms;
   }

    function multipleCheck(e) {
        var self = e.target, checked = self.checked, prev = prevCheckbox;
        prevCheckbox = self;

        if (!prev || !e.shiftKey || self == prev) {
            // シフト押してない, 同じのクリックしてたら止める
            return;
        }

        // 範囲内にあるか確認してチェック状態をどうにか
        for (var i = 0, inRange = 0; i < checkboxLength; i++) {
            var elm = checkboxes[i];
            if (inRange) elm.checked = checked;
            if (elm == prev || elm == self) {
                // 開始 or 終了地点
                elm.checked = checked;
                if (++inRange > 1) break;
            }
        }
    }

    init(document, false);
    // 重いならこれやめるといいかも
    document.addEventListener('DOMNodeInserted', function(e) {
        var node = e.target;
        if (node.nodeType != 1) return;
        // この辺はよく追加されるけど無視していいだろうと
        if (/^(?:a|img|br|script)$/i.test(node.nodeName)) return;
        init(node, true);
    }, false);
})();

Google検索のサムネイルをopen.thumbshots.orgに変えるユーザースクリプト

open.thumbshots.org がまともに画像を表示しなくなったので使えなくなりました。
ということで対応したやつ Part2 の方で。

Googleの検索結果にサムネイルを追加していくユーザースクリプト Part2

過去の修正内容

  • 2012.08.17
    DOMNodeInsertedでdiv#iresを追加するように変わってたので対応
    c49a94fadc
  • 2012.07.11
    httpsじゃない場合もあるので@include増やした
    9df2cc8
  • 2012.06.20
    サムネクリックできるようにリンク追加
    仕様変更に合わせてCSS修正
    6da82c6
  • 2011.11.08
    商品検索などでレビューがあったときサムネイルが表示されてなかったのを修正
  • 2011.11.07
    httpsの場合も有効に
    (画像取得はhttpなので信頼できるサイトの表示はなくなる)
    サイトリンクが付いてる場合のCSSを修正
  • 2011.10.24
    Google Search Number Favicon使用時でもサムネ付くように対応
    AutoPagerize使用時に2ページ目以降サムネ付かなかったのを修正
    NinjaKitのJSLintで怒られないように修正

_vimperatorrcでも晒してみるか

" _vimperatorrc
source! ~/_vimperatorrc.local
" vim: set ft=vimperator:

" プラグインパス
set runtimepath=~/vimperator

" https://github.com/vimpr/vimperator-plugins
" _libly.js
" _smooziee.js
" feedSomeKeys_3.js
" googlesuggest.js
" migemo-find.js
" walk-input.js

" https://github.com/oflow/vimperator-plugins/blob/master/copy.js
" copy.js
" (タイトル取得時に選択文字列を優先するようにしてる)

" ウィンドウタイトルの文字列
set titlestring=Firefox

" ページ全体で検索語を強調表示
set hlsearch

" リンクURLをコマンドラインに表示
" 1ならステータスライン
set showstatuslinks=2

" input要素にfocusを奪われないようにする
" set focuscontent

" 補完リストは検索エンジンと履歴
" オートコンプリート関係
" s 検索エンジンのん
" f ローカルファイル
" b ブックマーク
" h 履歴
" l ロケーションバー(ブックマーク、履歴)
" S 検索サジェスト
set complete=sl

" リストに表示する最大数
set maxitems=10

" 検索は大文字小文字を無視する
set ignorecase

" Beepいらない
set visualbell
highlight Bell display:none

" クイックヒントのスタイル
" ●の中に数字
highlight Hint z-index:9999; font-size:10px; color: #fff; text-shadow: 0 1px 0 #000; line-height: 20px; background-color:rgba(0,0,0,0.6); border-width:0px; border-radius: 10px;box-shadow: 0 0 2px rgba(0,0,0, 0.5); padding: 0 0; min-width: 20px; text-indent: -1px;text-align: center; display: inline-block;position:absolute; text-align: cener; vertical-align: middle; font-family: Menlo, Consolas, Monaco, monospace; text-transform: uppercase; margin-top: --7px; margin-left: -7px;

" クイックヒントのリンクの色
highlight HintElem background-color:rgba(240,0,0,0.1);

" クイックヒントのアクティブなリンクの色
highlight HintActive background:rgba(0,0,240,0.3);

" コマンドラインでIMEを自動的にOFFにする
style -name commandline-ime chrome://* #liberator-commandline-command input {ime-mode: inactive;}

" キーマップ
" nmap ノーマルモード
" imap インサートモード
" vmap ビジュアルモード
" cmap コマンドモード
" omap オペレータ待機モード
" mapでなくnoremap使う

" ;とtypoっても安心
map ; :

" ブックマークに追加するの無効
map a <NOP>

" BackSpaceで戻るを無効
map <BS> <NOP>

" 貼り付け無効
noremap p <NOP>
noremap P <NOP>

" 補完候補を上下キーでも選択できるようにする
cnoremap <Up> <S-Tab>
cnoremap <Down> <Tab>

" 上下移動を大きく (5倍)
noremap j 5j
noremap k 5k

" J, Kはページ下端、上端
noremap <S-j> 100%
noremap <S-k> gg

" 右のタブに切り替え
noremap h <C-p>

" 左のタブに切り替え
noremap l <C-n>

" 親ディレクトリに移動j
noremap <S-u> gu

" Windows風なアレ
" <S-Esc>で一時的に無効にして戻す
" Ctrl+a (全選択)
noremap <C-a> <S-Esc><C-a><S-Esc>
inoremap <C-a> <S-Esc><C-a><S-Esc>
cnoremap <C-a> <S-Esc><C-a><S-Esc>
" Ctrl+c (コピー)
noremap <C-c> <S-Esc><C-c><S-Esc>
inoremap <C-c> <S-Esc><C-c><S-Esc>
cnoremap <C-c> <S-Esc><C-c><S-Esc>
" Ctrl+x (カット)
noremap <C-x> <S-Esc><C-x><S-Esc>
inoremap <C-x> <S-Esc><C-x><S-Esc>
cnoremap <C-x> <S-Esc><C-x><S-Esc>
" Ctrl+v (ペースト)
" noremap <C-v> <S-Esc><C-v><S-Esc>
inoremap <C-v> <S-Esc><C-v><S-Esc>
cnoremap <C-v> <S-Esc><C-v><S-Esc>
" Ctrl+z (アンドゥ)
" noremap <C-z> <S-Esc><C-z><S-Esc>
inoremap <C-z> <S-Esc><C-z><S-Esc>
cnoremap <C-z> <S-Esc><C-z><S-Esc>


" <C-S-t>, <C-S-c>でタイトルとURLをコピー
noremap <C-S-t> :copy titleAndURL<CR>
noremap <C-S-c> :copy titleAndURL<CR>

" <C-A-u>でURLをコピー
noremap <C-A-u> :copy URL<CR>

" Google検索(同じタブ)
noremap s :set<Space>complete=s<CR>:open<Space>g<Space>

" Google検索(新規タブ)
" 検索キーワードがgになってる場合
noremap S :set<Space>complete=s<CR>:tabopen<Space>g<Space>

" Amazon検索(新規タブ)
" 検索キーワードがaになってる場合
noremap ga :set<Space>complete=s<CR>:tabopen<Space>a<Space>

" 楽天市場検索(新規タブ)
" 検索キーワードがrになってる場合
noremap gr :set<Space>complete=s<CR>:tabopen<Space>r<Space>

" -- feedSomeKeys_3.js --
" https://github.com/vimpr/vimperator-plugins/raw/master/feedSomeKeys_3.js
command! -nargs=+ lazy autocmd VimperatorEnter .* <args>

" feedly
lazy fmaps -u='www.feedly.com' g h m a e t c d p l s n b n p o v V m s S D e t d c / r ? 1 2 3 4 5 6 7 8 9 <Enter>

" Google Reader
lazy fmaps -u='www.google.(com|co.jp)/reader' -events=vkeypress <Space> j k n p m o s v A r S N P X O gh ga gs gt gu u / ? J K

" Google Reader Full Feed (Greasemonkey)
lazy fmaps -u='www.google.(co.jp|com)/reader' -events=vkeyup z

" Gmail
lazy fmaps -u='mail.google.com/mail' c / j k n p o u e x s r a # [ ] ? gi gs gt gd ga gc
lazy fmaps -u='mail.google.com/mail/.*/[0-9a-f]+$' c / j n k p n j p k o u e x s r a # [ ] ? gi gs gt gd ga gc

" Twitter
lazy fmaps -u='^http://twitter.com/' <Space> . j k ?
lazy fmaps -u='^http://twitter.com/' -events=vkeydown f r t n m gh gr gp gf gm

" -- /feedSomeKeys_3.js --

" -- copy.js --
" https://github.com/oflow/vimperator-plugins/blob/master/copy.js
javascript <<EOM
// この2つしか使わない
liberator.globalVariables.copy_templates = [
  {label: 'titleAndURL', value: '"%TITLE%" %URL%'},
  {label: 'URL',         value: '%URL%'}
];
EOM
" -- /copy.js --

Firefox用のクックパッド レシピ検索プラグイン作った

晩ごはん何にしようか迷ったら具材からまー適当に調べられるので。
たぶん他に作ってる人いるだろうけどググるのすら面倒だし自分で書いた方が早いやって事です。

どうやらこれ、Chromeでも使えるみたい。

クックパッド検索プラグインをインストール

cookpad.xmlの中身はこんなの↓

<?xml version="1.0" encoding="UTF-8"?>
<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
<ShortName>クックパッド</ShortName>
<Description>クックパッド レシピ検索</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16">data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMDAAAzYQECNs0LIV/+Ezl//xQ8gv8OKWn/Awc94QAAM4AAADMPAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMaAQI2xhZBiv8uier/M5n//zOZ//8zmf//M5n//zGS9v8dVqb/BApB5QAAMzsAAAAAAAAAAAAAAAAAADMWAgc92yRswv8sg+L/LIPi/yyD4v8sg+L/LIPi/yyD4v8sg+L/M5f9/y2F5P8IF1H2AAAzOwAAAAAAAAAAAAAztCNovf8lb8j/JCRQ/1FRdP9RUXT/UVF0/1FRdP9RUXT/KytW/yVtxP8zmf//LYXk/wQLQeUAADMPAAAzQBAwc/8zmf//K4Dd/15efv/w8PP/5ubr/+bm6//m5uv/5ubr/4yMo/8eWqr/M5n//zOZ//8dV6f/AAAzgAAAM6Imc8z/M5n//zGS9v8/P2b/eHiT/0ZGa/9GRmv/RkZr/0ZGa/82Nl//GEeS/zOZ//8zmf//MZL2/wMIPeECBjveMpf8/zOZ//8zmf//JCxc////////////////////////////29vi/xEydv8yl/z/M5n//zOZ//8OKWr/BxZQ+jOZ//8zmf//HVeo/xcbS//+/v7///////////////////////n5+v8MDD3/ICVU/xxSoP8zmf//FDyC/wYTTPYzmf//J3TO/01Ncf/5+fr/////////////////////////////////hoae//z8/f9PT3L/J3bQ/xM5f/8BAjbSMZL1/xtRn/+rq7z/////////////////////////////////////////////////oKCz/x1YqP8LIV/+AAAzjSJluf8lbcX/Xl5+//7+/v/+/v7/39/m////////////z8/Z/2VlhP/8/P3/+fn6/0hJbf8jab//AQI2zQAAMyYKHVr7M5f8/xhIkv8pK1f/KCpX/zk6Y//19ff//v7+/25ui/8OK2z/HCJT/xkhVP8eWan/FkGK/wAAM2EAAAAAAAAziRlKlf8zmf//MpT4/zKU+P8hYbT/FyBU/x8jU/8XRY7/M5j+/zOZ//8zmf//JW7G/wECNsYAADMDAAAAAAAAMwUAADOxGUqV/zOX/f8zmf//M5n//zOZ//8zmf//M5n//zOZ//8zmf//I2i9/wIHPdsAADMaAAAAAAAAAAAAAAAAAAAzBQAAM4kKHVr7ImW5/zGS9f8zmf//M5n//zKW/P8mc8z/EDBz/wAAM7QAADMWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzJgAAM40BAjbSBhNM9gcWUPoCBjveAAAzogAAM0AAAAAAAAAAAAAAAAAAAAAA+A8AAOAHAADAAwAAgAEAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAMADAADgBwAA+B8AAA==</Image>
<Url type="text/html" method="GET" template="http://cookpad.com/search/post">
  <Param name="keyword" value="{searchTerms}"/>
</Url>
<SearchForm>http://cookpad.com/</SearchForm>
</SearchPlugin>

Google検索でw3support.netだとかうざいサイトがあったら消すやっつけGresemonkeyスクリプト

動作確認
Firefox 6.0.2 + ユーザースクリプトを実行できるもの
(Scriptish 0.1.4 or Greasemonkey 0.9.11 or UserScriptLoader.uc.js 0.1.6.1)

ja.w3support.netだとかアホみたいな翻訳してるサイトがGoogle検索でよく引っかかってうざいから消そう!
というので作ったんですが他にもどんどん消したいのが出てきたんで増やせるようにしたやつです。

※Googleの仕様が変わるともの凄い勢いでエラーでるかもしれません

ダウンロード : google_search_urlfilter.user.js (Ver.1.0.20110916)

うざそうなURL
w3support.net, efreedom.com, vidtaker.com : あほ翻訳
aucfan.com : オークション見ないので
calamel.jp : 何かきもちわるい

// ==UserScript==
// @name           Google search urlfilter
// @namespace      http://oflow.me/archives/231
// @description    urlfilter for Google search result
// @include        http://www.google.co.jp/search*
// @include        http://www.google.co.jp/webhp*
// @include        http://www.google.co.jp/#
// @include        http://www.google.co.jp/#q=*
// @include        http://www.google.co.jp/#hl=*
// @include        http://www.google.com/search*
// @version        1.0.20110916
// ==UserScript==

(function() {
    // うざそうなURL一覧
    var regexpUrls = [
        /^http://[^.]+.w3support./,
        /^http://[^.]+.efreedom.com/,
        /^http://[^.]+.vidtaker.com/,
        /^http://vidtaker.com/,
        /^http://aucfan.com/,
        /^http://calamel.jp/
    ];
    var length = regexpUrls.length;
    function urlfilter(doc) {
        if (doc.nodeType != 1) return;
        var nodes = document.evaluate('.//a[@class="l"]',
                        doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

        for (var i = 0, node; node = nodes.snapshotItem(i); i++) {
            for (var j = 0; j < length; j++) {
                if (regexpUrls[j].test(node.href)) {
                    var li = node.parentNode.parentNode.parentNode.parentNode;
                    li.parentNode.removeChild(li);
                    break;
                }
            }
        }
    }
    urlfilter(document.body);

    window.addEventListener('unload', function() {
        document.body.removeEventListener('DOMNodeInserted', urlfilter, false);
        window.removeEventListener('unload', arguments.callee, false);
    }, false);
})();

Firefox 4以降のRSS購読ボタンをFirefox 3みたくURLバーにつっこむ.uc.xul

動作確認
Firefox 4, 5, 6.02 + userChromeJS 1.3, 1.4 + Sub-Script/Overlay Loader v3.0.31mod
テーマ: デフォルト, rein

Firefox 4にしてから購読ボタンどこいった!?なんてことになったのでいつもの場所に戻すuserChrome.jsのスクリプトです。
JavaScriptでボタン移動するだけだといつの間にかどっかいってたので、xulでボタン追加に変更しました。
デフォルトテーマ、reinでのみ確認してるので他のテーマでは表示されないなんてことになるかもしれません。

※ xulにしたのでツールバーに購読ボタン表示しなくてもURLバーの中に勝手に追加されます。
※ RSSフィードがないサイトの場合は購読ボタン非表示になってます。
※ 元々ある購読ボタンは押せなくなるはずです。

ダウンロード : feed-button-in-urlbar.uc.xul (Ver.1.0.20110711)

<?xml version="1.0"?>
<!--
// ==UserScript==
// @name           feed button in urlbar
// @namespace      http://oflow.me/archives/310
// @description    RSS購読ボタンをURLバーの中につっこむ
// @compatibility  Firefox 4.0, 5.0, 6.0b1
// @version        1.0.20110711
// ==/UserScript==
//
// Firefox 6以降でdata:text/cssがbase64エンコードでないとアレ
// 見辛いけど解決策わからん
-->
<?xml-stylesheet type="text/css" href="data:text/css;base64,QG5hbWVzcGFjZSB1cmwoaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9rZXltYXN0ZXIvZ2F0ZWtlZXBlci90aGVyZS5pcy5vbmx5Lnh1bCk7DQojdXJsYmFyLWljb25zICNmZWVkLWJ1dHRvbiBkcm9wbWFya2Vye2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O30NCiN1cmxiYXItaWNvbnMgI2ZlZWQtYnV0dG9uIC5idXR0b24tYm94e21hcmdpbjowICFpbXBvcnRhbnQ7cGFkZGluZzowICFpbXBvcnRhbnQ7fQ0KI2ZlZWQtYnV0dG9uey1tb3otaW1hZ2UtcmVnaW9uOiByZWN0KDAsIDE2cHgsIDE2cHgsIDBweCkgIWltcG9ydGFudDttaW4td2lkdGg6MTZweCAhaW1wb3J0YW50O21hcmdpbi1yaWdodDoycHggIWltcG9ydGFudDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7bGlzdC1zdHlsZS1pbWFnZTp1cmwoImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBUGNBQUFBQUFQLy8vLzkvQVArQUF2K0JBLytCQlArQ0J2K0RCLytEQ1ArRUN2K0ZDLytGRFArR0R2K0hELytJRXYrSkZQK0tGditMRi8rTEdQK01HZitOSFArT0h2K1BILytQSVArUkpQK1NKZitTSnYrVEtQK1VLditWTFArV0x2K1hNUCtZTWYrWU12K1pNLytjT3YrZFBQK2hRLytpUmYralIvK2pTUCtsVFArbVR2K25ULytvVWYrcFUvK3BWUCtxVmYrclYvK3RXLyt0WFArdVhmK3VYdit2WC8rdllQK3dZZit4WS8reVpmK3ladit6Wi8remFQKzBhZiswYXYrMWJQKzJidiszYi8rM2NQKzRjZis0Y3YrNWMvKzVkUCs2ZHYrN2QvKzhlZis4ZXYrOWZQKytmZisrZnYrL2dQL0FnZi9CZy8vQ2hQL0NoZi9DaHYvRGgvL0VpZi9Iai8vSWtmL0lrdi9Kay8vSmxQL0tsZi9LbHYvTm5QL09uZi9PbnYvUG4vL1BvUC9Rb2YvUW92L1JwUC9UcVAvVXFmL1Vxdi9WcS8vVnJQL1p0UC9hdGYvYnQvL2J1UC9jdXYvZHUvL2R2UC9ldnYvZnYvL2d3Zi9ody8vaXhmL28wZi9ObmYvU3AvL1hzZi9ldi8vZndQL2d3Ly9oeFAvaXh2L2p5UC9tenYvbjBQL28wdi8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBQUlNQUxBQUFBQUFRQUJBQUFBanRBQWNKR0Vpd1lNRkJKRXlvZ0dHalI1RWxWYmlNU2JNR2pod0JJVWFVU1BHaUJvOGhTcWhvRVlObXpSc0JHejU0U1pQSHhRd2RRWkpNeVJJR2pSb0JGalFFMkFub1RKc2NRSkJJd2ZMbGpJQUlGZnI0MlJrZ0VCc2NQNDVBdWZKRlFBTUlGREIwd01OVTBBMGZScDVZRVlDQWdadzVkRGlJT0xQVFRvMGVSSndJSUlDQUtaMG1JTXpzWEVOamg1Q0JBNkpzMFJPQUQ1TVBaUUlBYWlFakI4RUJCaFFROXJMRXcwNFVMR0lRZk9JR1NvSTRBZTVrSUJNQXpJa1ZCTjBFY0ZOQVM0QTlGTUFFK0pOd3M1c25BcTRFaVBPZ1M0QTZHUTArUHJEQXdZUUxLUVVJRkE2NXVJU2Nnd0lDQURzPSIpO30NCiN1cmxiYXItaWNvbnMgI2ZlZWQtYnV0dG9uW2Rpc2FibGVkXXtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fQ0K"?>
<!DOCTYPE window SYSTEM "chrome://browser/locale/browser.dtd" >
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<hbox id="urlbar-icons">
    <button id="feed-button"
        insertbefore="star-button"
        type="menu"
        style="-moz-user-focus:none;min-width:16px;"
        class="plain urlbar-icon"
        tooltiptext="&feedButton.tooltip;"
        onclick="return FeedHandler.onFeedButtonClick(event);">
        <menupopup id="feed-menu"
            onpopupshowing="return FeedHandler.buildFeedList(this);"
            oncommand="return FeedHandler.subscribeToFeed(null, event);"
            onclick="checkForMiddleClick(this, event);"/>
    </button>
</hbox>
</overlay>

find_in_searchbar_highlight.uc.jsに機能追加したりボタンをテーマ「rein」に合わせてみた

Firefox 4.0.1, userChromeJS 1.3, Sub-Script/Overlay Loader v3.0.30modで動作確認。

検索ボックスのボタン(虫眼鏡)をクリックでページ内検索する便利なuserChrome.jsのスクリプト「find_in_searchbar_highlight.uc.js」(Firefox用スクリプトアップローダー(新)の642.js)ですが、テーマ「rein」を使ってるとハイライトボタンが浮いてしまう。
ということで変えました。

ついでにいろいろ変えてます。以下の通り。

  • 虫眼鏡クリック以外にも検索ボックス内でCtrl+EnterまたはAlt+Nでページ内検索(次へ)
  • 同様にCtrl+Shift+EnterまたはAlt+Pでページ内検索(前へ)
  • ハイライトボタンは初期状態で非表示(使えないので)
    ページ内検索を1回実行すると表示
    通常の検索(Enterのみ、Alt+Enterなど)でまたハイライトボタン非表示にする
  • ハイライトはボタンクリック以外にも検索ボックス内Ctrl+Hで切り替えできる
  • 背景色変更あたりを微調整

ダウンロード : find_in_searchbar_highlight_mod.uc.js (デフォルトボタンのまま)
ダウンロード : find_in_searchbar_highlight_mod(rein).uc.js (rein対応ボタン)
※ボタンの画像が違うだけです。たぶん。

// ==UserScript==
// @name           find_in_searchbar_highlight.uc.js (mod)
// @description    検索バーでページ内検索+検索文字のハイライト
// @include        chrome://browser/content/browser.xul
// @author         yosuke
// @compatibility  Firefox 4.0
// @Note           (概要)
// @Note           ・検索バー内にある検索ボタン(虫眼鏡)をクリックすると,検索バーに入力された文字列をページ内検索する.
// @Note           ・検索バーの右端にあるペンボタンをクリックすると,検索バーに入力された文字列をすべてハイライト表示する.
// @Note           ・検索した結果,文字列がみつからない場合,検索バー内の背景が赤になる.
// @Note           ・先頭に戻って検索するか,末尾に戻って検索する場合,検索バー内の背景が緑になる.
// @Note           (具体的な使い方)
// @Note             検索ボタンの右クリック -> ページ内検索,次を検索
// @Note             検索ボタンの左クリック -> 前を検索
// @Note             検索ボタンの中クリック -> 検索バー内の文字列を消去
// @Note             ペンボタンをクリック   -> ハイライトのオン,オフ
// @Note           (注意)
// @Note             「任意の設定」の値を変更することで各種機能を個別に設定できます.
// @Note             検索バーによるページ内検索を行う場合,検索ボタンを表示させてください.
// @Note           (追加機能:oflow)
// @Note             テーマ「rain」に合わせてアイコンを変更
// @Note             ハイライトボタンの位置を検索ボックスの中に移動
// @Note             ページ内検索をした時だけハイライトボタンを表示するように変更
// @Note             Ctrl+Enter, Alt+Nでページ内検索(次を検索)
// @Note             Ctrl+Shift+Enter, Alt+Pでページ内検索(次を検索)
// ==/UserScript==

(function() {
    /*----- 任意の設定 -----*/
    // 検索バーによるページ内検索を許可するか("true" or "false")
    const USE_FINDSEARCH = "true"
    // 強調ボタンを配置するか("true" or "false")
    const USE_HIGHLIGHTBUTTON = "true"
    // 検索バーでページ内検索を行う際にページ内検索バーを表示するか("true" or "false")
    const USE_FINDBAR = "false"
    // 先頭に戻って検索,末尾に戻って検索を許可するか("true" or "false")
    const USE_WRAP= "true"
    
    /*----- 初期設定 -----*/
    // ID, Class  Object
    var searchbar = document.getElementById("searchbar");
    var searchbox = document.getAnonymousElementByAttribute(searchbar, "anonid", "searchbar-textbox");
    var searchGoButton = document.getAnonymousElementByAttribute(searchbar, "anonid", "search-go-button");
    var inputbox = document.getAnonymousElementByAttribute(searchbar, "anonid", "input");
    var findstatus = gFindBar.getElement("find-status-icon");
    
    // Colour, Image
    const white = "#ffffff";
    const green = "#ccffcc";
    const red   = "#ffcccc";
    var onHighlight = 'data:image/png;base64,'+
    'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0'+
    'U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFgSURBVHjaYv7//z/j69evWR8+fMj19etX'+
    'HgYGBhjmxoK5gJhDTEyMOT4+/v+pU6f+AwQQM1Azy5o1a/hevXolC5RUAmIFIJYHYlksWBKIhYEW'+
    'sQEt/PXgwYPfAAHEADQNZKr21KlTD7x8+fLbfwIApAakFqQHpBcggIA0gwAQOxKjGdkQkB6QXoAA'+
    'YgISzCC/AU3jZMADTExMwBgEoGpBLmcGCCCQAYxQQ/BqxgJAehgBAogJymEkUTNcD0AAMZFhMwoA'+
    'CCAmSjSDAEAAMTGQAM6cOYMhBhBAMAP+o9uelpZGSDNYD0AAgQJCGIgtgNG7BZvmWbNmYRgG4jMy'+
    'MvoAmScAAogFSPwF4m/ApPwdlhZAmpAVo2sGqQXpAekFCCCKkzJAADFmZWXBMpMUUFAUmsJYcITj'+
    'H6jNr4Gan4WEhHwCCCAGUHYGGsIKFABlYSGoIWI4MEhOCKQWpAekFyDAAO0k7MPVi8ODAAAAAElF'+
    'TkSuQmCC';
    var offHighlight = 'data:image/png;base64,'+
    'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0'+
    'U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFYSURBVHjaYv7//z/j69evWR4+fMj59etX'+
    'bgYGBhjmwoI5gZhdTEyMOT4+/v+pU6f+AwQQM0jzmjVr+F69eiUHlFQGYkUgVgBiOSxYCohFgBax'+
    'AS389eDBg98AAcQANA1ksvbUqVMPvHz58tt/AgCkBqQWpAekFyCAgDSDABA7EqMZ2RCQHpBegABi'+
    'AhLMIP8BTQP5DycwMTEBYxCAqgW5nBkggEAGMEINwasZCwDpYQQIICYoh5FEzXA9AAHERIbNKAAg'+
    'gJgo0QwCAAHExEACOHPmDIYYQADBDPiPbju6YiyawXoAAgiEhIHYGxbHxsbGKHGOzocBkB6QXoAA'+
    'YgESf4H4GzApf4elBWT/Y3M2SC1ID0gvQABRnJQBAogxKysLlplAGUUUmsJYcITjH6jNr4Gan4WE'+
    'hHwCCCAGUHYGGsIKFOABSghBDRHDgUFyQiC1ID0gvQABBgCgmw2B3mPqtQAAAABJRU5ErkJggg==';

    /*----- 検索ボタンをページ検索ボタンに -----*/
    // ページ内検索検索関数
    function find_in_searchbar(e){
        document.getElementById('toggle-all-highlight').style.display = 'block';
        var sel = searchbar.value;
        // 中クリック -> 検索文字列消去
        if(e.button == 1){
            gFindBar.toggleHighlight(false);
            searchbar.value = "";
            searchbox.style.backgroundColor = white;
        }
        // 左クリック, Ctrl+Enter       -> ページ内検索,次を検索
        // 右クリック, Ctrl+Shift+Enter -> 前を検索
        else if(sel){
            gFindBar._findField.value = sel;
            if(e.button == 0 || (e.ctrlKey && !e.shiftKey && e.keyCode == 13) || (e.altKey && e.keyCode == 78)){
                // 左クリック or Ctrl+Enter or Alt+N
                // 次へ
                gFindBar.onFindAgainCommand(false);
            } else if (e.button == 2 || (e.ctrlKey && e.shiftKey && e.keyCode == 13) || (e.altKey && e.keyCode == 80)) {
                // 右クリック or Ctrl+Shift+Enter or Alt+P
                // 前へ
                gFindBar.onFindAgainCommand(true);
            }
            if(findstatus.getAttribute("status")=="notfound"){
                searchbox.style.backgroundColor = red;
                // 見つからなくても検索ボックスにフォーカス
                searchbox.focus();
            }
            // 折り返し判定
            else if(findstatus.getAttribute("status")=="wrapped"){
                if(USE_WRAP=="false"){
                    if(e.button == 0){
                        gFindBar.onFindAgainCommand(true);
                    }else{
                        gFindBar.onFindAgainCommand(false);
                    }
                }
                searchbox.style.backgroundColor = green;
            }else{
                searchbox.style.backgroundColor = white;
            }
        }
        // ページ検索バーを表示するかどうか
        if(USE_FINDBAR == "true"){
            gFindBar.open();
        }else if(USE_FINDBAR == "false"){
            gFindBar.close();
        }
    }
    
    // 検索ボタン設定
    if(USE_FINDSEARCH == "true"){
        searchGoButton.removeAttribute("onclick");
        searchGoButton.setAttribute("oncontextmenu","return(false);");
        searchGoButton.addEventListener("click", function(e){ find_in_searchbar (e);}, false);
        searchbar.addEventListener("click", function(){searchbox.style.backgroundColor = white;}, true);
    }
    
    /*----- ハイライトボタンの生成 -----*/
    var sw = true;
    var str = "";
    // ハイライトオン,オフ関数
    function highlight_toggle() {
        var sel = searchbar.value;
        if(sel){
            gFindBar._findField.value = sel;
            gFindBar.toggleHighlight(false);                        // ハイライト初期化
            gFindBar.toggleHighlight(true);
            // 検索結果 notfound
            if(findstatus.getAttribute("status")=="notfound"){
                newButton.setAttribute("image",offHighlight);
                searchbox.style.backgroundColor = red;
                sw = false;
            }
            else if(sw){
                newButton.setAttribute("image",onHighlight);
                searchbox.style.backgroundColor = white;
            }else if(!sw){
                if(str == sel){
                    gFindBar.toggleHighlight(false);
                    newButton.setAttribute("image",offHighlight);
                    //sw = false;
                }else{
                    sw = !sw;
                    newButton.setAttribute("image",onHighlight);
                    searchbox.style.backgroundColor = white;
                }
            }
            sw = !sw;
        }
        else{
            sw = "false";
            newButton.setAttribute("image",offHighlight);
            gFindBar.toggleHighlight(false);
        }
        str = sel;
        // ページ検索バーを表示するかどうか
        if(USE_FINDBAR == "true"){
            gFindBar.open();
        }else if(USE_FINDBAR == "false"){
            gFindBar.close();
        }

    }
    // ハイライトボタン設定
    var newButton = document.createElement("toolbarbutton");
    newButton.setAttribute("label", "u3059u3079u3066u5f37u8abfu8868u793a");
    // ツールチップテキストは検索バーと同じ「すべて強調表示」
    newButton.setAttribute("tooltiptext", "u3059u3079u3066u5f37u8abfu8868u793a");
    newButton.setAttribute("id", "toggle-all-highlight");
    newButton.addEventListener("click", highlight_toggle, false);
    newButton.setAttribute("oncontextmenu","return(false);");
    newButton.setAttribute("image",offHighlight);
    // ボタンのマージンとかの設定
    newButton.style.cssText = 'display: none; margin: -6px 0px;';
    // 検索ボックス内にボタン表示する場合は背景色透過も
    //newButton.style.cssText = 'display: none; margin: 0px -2px; background-color: transparent !important';
    if(USE_HIGHLIGHTBUTTON == "true"){
        searchbar.parentNode.insertBefore(newButton, searchbar.nextSibling);
        // 検索ボックス内にボタン表示
        // searchGoButton.parentNode.insertBefore(newButton, searchGoButton.nextSibling);
        // 検索ボックスの左側にボタン表示
        // searchbar.parentNode.insertBefore(newButton, searchbar);

    }

    // 検索ボックスのCtrl+Enterでもページ内検索(次へ)
    //               Ctrl+Shift+Enterでもページ内検索(前へ)
    //               Ctrl+Hでハイライト切り替え
    // ついでに検索バーと同じようにAlt+Nで次、Alt+Pで前も使えるようにしておく
    searchbox.addEventListener('keydown', function(e) {
        // keyCode: 13=Enter, 72=h, 78=n, 80=p
        if ((e.ctrlKey && e.keyCode == 13) || (e.altKey && (e.keyCode == 78 || e.keyCode == 80))) {
            // suggestが出てる場合があるのでページ内検索実行時は消す
            searchbox.blur();
            searchbox.focus();

            find_in_searchbar(e);

            e.stopPropagation();
            e.preventDefault();
        } else if (e.ctrlKey && e.keyCode == 72) {
            highlight_toggle();
            e.stopPropagation();
            e.preventDefault();
        }
        if (!e.ctrlKey && e.keyCode == 13) {
            // ページ内検索を使用しない場合ハイライトボタンは不要なので非表示にする
            newButton.style.display = 'none';
            // ページ内検索して背景色変わってるかもしれないので戻す
            searchbox.style.backgroundColor = white;
        }
    }, false);
    searchbox.addEventListener('keyup', function(e) {
        if (searchbar.value == '') {
            // 検索ボックスのテキストが空なら背景色戻す
            searchbox.style.backgroundColor = white;
        }
    }, false);
})();

ものぐさなのでFirefox Add-ons 「Read It Later 2.1.1」の右クリックメニューだけ日本語化する.uc.xul

Firefox 4.0.1, userChromeJS 1.3, Sub-Script/Overlay Loader v3.0.30modで動作確認。

いや、ほらアドオン日本語化するのって面倒でしょ?
Read It Laterなんて日本語化するほどのものでもないし、右クリックメニューに英語まじってると気になるってだけなんですよ!

ということで、chromeフォルダに突っ込むだけのお手軽日本語化(右クリックメニューだけ)。
訳は適当。

ダウンロード : read-it-later-2.1.1.ja.uc.xul

<?xml version="1.0" encoding="UTF-8"?>
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<popup id="contentAreaContextMenu">
	<menuitem id="RIL_context_saveLink" insertbefore="context-bookmarklink" label="このリンク先をあとで読む" oncommand="RIL.clickSaveCallback();event.stopPropagation();"/>
	<menuitem id="RIL_context_clickMode" insertafter="context-bookmarkpage" label="あとで読むリンクを指定" oncommand="RIL.toggleClickToSaveMode();event.stopPropagation();" />
	<menuitem id="RIL_context_savePage" insertafter="context-bookmarkpage" label="このページをあとで読む" oncommand="RIL.addCurrent();event.stopPropagation();"/>
	<menuitem id="RIL_context_saveTabs" label="すべてのタブをあとで読む" oncommand="RIL.saveTabs();event.stopPropagation();" />
</popup>
</overlay>