ぼちぼち散歩

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--/-- --:-- | スポンサー広告 | トラックバック(-) | コメント(-)

ページの先頭へ

Firefoxをこう使ってます的な何か その7

Greasemonkey

任意のページのに任意のJavaScript(User JavaScriptとか言う)を当てて,ページの挙動を変えたり,機能を追加したりいろいろできる拡張機能.最近では,他のブラウザでもUser JavaScriptは使えるようになっていて,Operaは標準搭載,SafariならGreaseKitを使って,SleipnirならSeaHorse,IE7でもIE7Proでできるようになっているようだ.しかし,独自拡張があったり,そもそもFirefoxと他のブラウザではJavaScriptの挙動が違ったりで互換性のあるスクリプトはそんなに多くはないので,一番ユーザが多そうなGreasemonkeyを使うのが一番便利という感じ.また,IEではXPathが使えないのでスクリプト書くのが面倒くさそう.

他の人が書いたのを使わせてもらっているのを列挙しておく.

livedoorクリップに各種ソーシャルブックマークのコメントを埋め込むGreasemonkeyスクリプト(管理人日記) - むぅもぉ.jp
livedoor クリップから主要SBMのコメントが見れるようになる.
blog.8-p.info: del.icio.us の IME まわりをましに
日本人のdel.icio.usユーザみんなが困ってそうな問題を解決してくれる.
livedoor Clip Cross Post - labs.37to.net
ブックマークは基本的にこちらのスクリプトを借りて,del.icio.usとlivedoor クリップに同時に投げるようにしている.投稿するときのインタフェースはlivedoor クリップになるので,layered del.icio.us bookmarklet (swdyh)のアイディアを拝借して,livedoor クリップ用のを自作して使っている.使いたい人はこれを持っていってください.
そのへんにぺろっと貼ってあるgreasemonkeyスクリプトにインストールボタンを付けるgreasemonkeyスクリプト
はてダとかに貼ってあるGreasemonkeyスクリプトにインストールボタンをつける.
AutoPagerize – Userscripts.org
いろんなページでAutoPagerできるようになる.AutoPagerが何かわからなければこのスクリプトをインストールしたあと,Googleの検索結果のページに行ってみたらわかると思う.いろんなページで使えるように,ページの継ぎ足しに関する情報はWikiで管理されていて,誰もが追加,編集できるようになっている.自動でページをつなげる部分と人力でページ情報を編集する部分がうまく組み合わさっていると思う.主要なサイトはほとんど使えるので,ブラウジング効率がかなり上がり,一番のおすすめ.類似のスクリプトにsilog - script/LDRizeというのもある.こちらはいろんなページでlivedoor Readerっぽい操作ができるようになるらしい.
ldrのレートを++/--できるようにするgreasemonkeyスクリプト
自分は一応livedoor Readerはレートで管理してるつもりになってるけど,適当過ぎてあんまり意味がないので,このスクリプトでちょっとはましになることを期待している.

日常から使ってるのはだいたいこのぐらいだと思う.他にも一時的に試してみてたり,しばらく使ってたけどやめたものがあったりで,いろいろありすぎて紹介しきれないのでこのへんにしておく.次に,自分で書いて使ってるやつ.全然大したことないけどあると便利なので.ちなみに,XPath, $X function, NSResolver < 16 < March < 2006 < nulog, NULL::something : out of the headphoneの$X関数を使わせてもらっている.

mixi show alt
mixiのマイミクシィ最新アルバムとか動画とかミュージックとかが,画像のみでタイトルを出さないから何のこっちゃわからない,と思ったらalt属性にタイトルが入っていたのでそれを表示するスクリプト.$X関数のおかげで簡単にできた.一応Safari 3 + GreaseKitでも動く.
// ==UserScript==
// @name           mixi show alt
// @namespace      relaxedcolumn.blog8.fc2.com
// @description    show alt attribute
// @include        http://mixi.jp/*
// ==/UserScript==

(function() {
    var w = unsafeWindow || window;
    var d = w.document;

    $X('//tr[@class="itemList"]//a/img').forEach(function(item) {
        item.parentNode.appendChild(d.createElement('br'));
        item.parentNode.appendChild(d.createTextNode(item.getAttribute('alt')));
        item.style.fontSize = '10px';
    });

    $X('//tr[@class="itemList"]//td').forEach(function(item) {
        item.style.verticalAlign = 'top';
    });

    function $X(exp, context) {
        if (!context) context = document;
        var resolver = function (prefix) {
            var o = document.createNSResolver(context)(prefix);
            return o ? o : (document.contentType == "text/html") ? "" : "http://www.w3.org/1999/xhtml";
        }
        var exp = document.createExpression(exp, resolver);

        var result = exp.evaluate(context, XPathResult.ANY_TYPE, null);
        switch (result.resultType) {
            case XPathResult.STRING_TYPE : return result.stringValue;
            case XPathResult.NUMBER_TYPE : return result.numberValue;
            case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
            case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
                result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
                var ret = [];
                for (var i = 0, len = result.snapshotLength; i < len ; i++) {
                    ret.push(result.snapshotItem(i));
                }
                return ret;
            }
        }
        return null;
    }
})();
Alc modify link
スペースアルクの英和・和英辞書はいつもお世話になっているものの,なぜかリンクが全部JavaScriptで中クリックで新規タブとかができないので,強引にリンクを普通のaタグに置き換えるスクリプト.
// ==UserScript==
// @name           Alc modify link 
// @namespace      relaxedcolumn.blog8.fc2.com
// @description    modify javascript link to normal link
// @include        http://eow.alc.co.jp/*
// ==/UserScript==

(function() {
    var w = unsafeWindow || window;
    var d = w.document;

    var BASE_URL = 'http://eow.alc.co.jp';
    var ENCODING = d.f1.ie.value;
    var WORD     = d.f1.q.value;
    var DK       = d.f1.dk.value;
    var PAGE     = d.f1.pg.value;

    function modifyLinks() {
        var links = d.getElementsByTagName('a');

        for(var i = 0, len = links.length; i < len; ++i) {
            if(!links[i].href.match(/^javascript:/)) {
                continue;
            }

            if(links[i].href.match(/goWordLink("(.+)")/)) {
                links[i].href = BASE_URL + '/' + RegExp.$1 + '/' + ENCODING + '/?ref=wl';
                continue;
            }

            if(links[i].href.match(/goPage("(d+)")/)) {
                links[i].href = BASE_URL + '/' + WORD + '/' + ENCODING + '/?pg=' + RegExp.$1;
                continue;
            }

            if(links[i].href.match(/goWordLinkHistory/)) {
                links[i].href = BASE_URL + '/' + links[i].innerHTML + '/' + ENCODING + '/?ref=wh';
                continue;
            }

            if(links[i].href.match(/goGradable("(.+)")/)) {
                links[i].href = BASE_URL + '/' + RegExp.$1 + '/' + ENCODING + '/?ref=hk';
                continue;
            }

            if(links[i].href.match(/goFairWord("(.+)")/)) {
                links[i].href = BASE_URL + '/' + RegExp.$1 + '/' + ENCODING + '/?ref=sp';
                continue;
            }

            if(links[i].href.match(/goFullText("(.+)",s*"(.+)")/)) {
                links[i].href = BASE_URL + '/' + WORD + '/' + ENCODING + '/?ref=ex&exp=' + RegExp.$1 + '&dn=' + RegExp.$2 + '&dk=' + DK + '&pg=' + PAGE;
                continue;
            }

            if(links[i].href.match(/goBack/)) {
                links[i].href = BASE_URL + '/' + WORD + '/' + ENCODING + '/' + (PAGE == '' ? '' : ('?pg=' + PAGE));
                continue;
            }
        }
    }

    w.addEventListener('load', function() {
        modifyLinks();

        var org_show_link = w.show_link;
        w.show_link = function(flag) {
            org_show_link(flag);
            modifyLinks();
        };
    }, false);
})();
LDR open entire site with key
何でもかんでもlivedoor Readerで管理したいので,フィードを配信してないところは,My RSSを使ってフィード化して読んでいる.ところが,生成されるフィードはそんなに精度が良くないので,ほとんど更新があったかどうかしか情報量がなく,結局元サイトを見に行くことになる.元サイトを開くキーボードショートカットがなかったので,適当にそれっぽいURLを取得して開くのを作った.またもや$X関数のおかげで簡単に書けている.
// ==UserScript==
// @name           LDR open entire site with key
// @namespace      http://relaxedcolumn.blog8.fc2.com/
// @include        http://reader.livedoor.com/reader/*
// ==/UserScript==
//
(function() {
    var w = unsafeWindow;
    var d = w.document;
    var _onload = w.onload;

    var onload = function(){with(w){
        Keybind.add("V", function() {
            w.open($X('//h1//a')[0].href);
        });
    }};

    w.onload = function(){
        _onload();
        onload();
    }

    function $X(exp, context) {
        if (!context) context = document;
        var resolver = function (prefix) {
            var o = document.createNSResolver(context)(prefix);
            return o ? o : (document.contentType == "text/html") ? "" : "http://www.w3.org/1999/xhtml";
        }
        var exp = document.createExpression(exp, resolver);

        var result = exp.evaluate(context, XPathResult.ANY_TYPE, null);
        switch (result.resultType) {
            case XPathResult.STRING_TYPE : return result.stringValue;
            case XPathResult.NUMBER_TYPE : return result.numberValue;
            case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
            case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
                result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
                var ret = [];
                for (var i = 0, len = result.snapshotLength; i < len ; i++) {
                    ret.push(result.snapshotItem(i));
                }
                return ret;
            }
        }
        return null;
    }
})();

Greasemonkeyについては語り尽くせないというか,それだけで世界が広がりまくってるので把握しきれてないけど,もはやGreasemonkeyなしではウェブブラウジングできない体になってしまっている.次回に適当になんかまとめっぽいこと書いて終わる予定.

スポンサーサイト

2007/11/10 21:04 | Firefox | トラックバック(0) | コメント(0)

ページの先頭へ

コメント

コメントの投稿


トラックバック

トラックバックURL
http://relaxedcolumn.blog8.fc2.com/tb.php/96-a816df1b

トップページへ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。