Sendai.js#02行ってきた

実は#01も行ったけど感想書くの忘れてた。そして今日#02にも行ってきた。おつかれさまでした!

内容

Firebugで作るGreasemonkeyスクリプト〜入門と実践(From Kanasan.JS) | Blog.37to.netを見ながらみんなでグリモン書いてみようっていう感じだった。自分でグリモン書いたりしてる人は思ったよりも少ない感じだったけど、Greasemonkeyスクリプトはサクっと書いてちょこっと便利になるというわかりやすいjsの活用事例だと思うので、これでjs仲間が増えるなら非常に楽しいことだと思った。

作ったやつ

上記の記事を見て作ったやつを、自分だけ勝手に改良した。コードは以下。

// ==UserScript==
// @name           Google Search Add Range(Gsar)
// @namespace      http://labs.37to.net/gsar/
// @description    Add form by date range to Google search result.
// @include        http://www.google.com/search*
// @include        http://www.google.co.jp/search*
// ==/UserScript==
// original http://blog.37to.net/2009/03/firebuggreasemonkeyf/
(function(){
    var resSelect = document.evaluate(
        '//form[@id="tsf"]//select[@name="as_qdr"]',
        document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null
    );
    if(!resSelect.snapshotLength){
        var selectHtml = [
            '<select name="as_qdr">',
                '<option value="all">指定なし</option>',
                '<option value="d">24時間以内</option>',
                '<option value="w">1週間以内</option>',
                '<option value="m">1か月以内</option>',
                '<option value="y">1年以内</option>',
            '</select>'
        ].join('');
        var selectElem = document.createElement('div');
        selectElem.innerHTML = selectHtml;
        selectElem = selectElem.firstChild;
        var resBtn = document.evaluate(
            '//form[@id="tsf"]//input[@name="btnG"]',
            document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null
        );
        var btnElem = resBtn.snapshotItem(0);
        btnElem.parentNode.insertBefore(selectElem, btnElem);
        
        var querys = location.href.split(/\?/)[1].split(/&/);
        for(var i = 0; i < querys.length; i++){
            var pair = querys[i].split(/=/);
            if(pair[0] == 'as_qdr'){
                document.evaluate(
                    'option[@value="' + pair[1] + '"]',
                    selectElem, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null
                ).snapshotItem(0).selected = true;
                break;
            }
        }
    }
})();

改良点はみっつ。

  • 念のため@includeにwww.google.comも追加しといた。
  • Google Chromeでも動くように、E4Xを使わずに文字列だけでselectタグを記述。
  • 指定した条件が、検索後の画面ではデフォルトで選択されてるようにした。

でもなんか、左端に出る「検索ツール」の指定との相性が悪いなあ。まあいいや。

それから条件選択のためのQUERY_STRINGの解析はかなり適当。深く考えずにsplitでやってるだけなので、なんかミスってたらごめん。マネしない方がいい。

他にもGoogleをちょっといじるやつは今までに何個か書いていたので、近いうちに載せようと思う。