Firebugのコマンラインを拡張してincludeできるようにしたら便利でした

さいきんFirebugでコードを書いている。書いてCtrl-Enterを押した瞬間に結果が確認できるので気持ちがいい。Canvasを使えばグラフィックも扱える。BASICでコードを書く感覚を思い出した。

firebug console

Firebug上では、あんまり長いコードを書くのはつらいところが難点だった。自分で拡張してincludeできるようにしたらこれがすごくいい。Firebug上で実行して動作を確認しながら関数を書いていって、うまく動くようになった時点でincludeしているファイルのほうに移動してFirebugのコマンドラインを空にする。vim上でコードを書いてブラウザに戻ってきてreloadするのにくらべてストレスが少ない。

vim上でコードを書き換えたときもCtrl-Enterでもう一度includeされて実行されるので、リロードは発生しないし、Firefoxとvimとをいったりきたりしなくてもいい。

Firebug を「カクカク化」して $x の第 2 引数でコンテキストノードを指定できるようにする。 – IT戦記のはなしの流れで、だれかがuserChrome.jsに書いたらいいじゃん、と書いていたのを思い出してuserChromeで拡張することにした。

[Ext] userChrome.js 0.8 – MozillaZine Forumsからダウンロードした。0.8はFirefox3でしか動かないっぽくて、Firefox2のままにしていたWindowsのほうもFirefox3にしちゃった。

更新 2008.2.25

FirebugCommandLineAPIがあるとかないとかでエラーが出ることがあったのでwatchメソッドでオブジェクトが存在するようになるのを待ってから実行する
を組み合わせて使うようにした。

現在のchrome/userChrome.jsはこうなってる。

( function (parentObject, props, f) {
    var fn = props.reduceRight( function (callback, propname) {
        return function (parentObject) {
            if ( parentObject[propname] ) {
                var newValue = parentObject[propname];
                callback(newValue);
            } else {
                {
                    parentObject.watch( propname, function ( name, oldValue, newValue ) {
                        callback(newValue);
                        unwatch(parentObject, name);
                        return newValue;
                    } );
                }
            }

        };
    }, f);
    fn(parentObject);
} )(window, ['FirebugCommandLineAPI'], function(newvalue) {
        newvalue.prototype.json2infogami = function (firstarg) {
                var infogamiEscape = function (v) { return v.replace(/([_\*])/g, "\\$1" ) };
                var textfilter = infogamiEscape ;
                var a = (firstarg.constructor.name == "Array") ? firstarg : arguments;
                var r = [];
                   for(var i = 0; i < a.length; i++) {
                                         var siteinfo = "";
                         for ( var n in a[i] ) {
                                var v = a[i][n];
                                siteinfo += n + ":    " + textfilter(v) + "\n";
                  }
                  r.push('
				
Safari hates me