Firebug1.2alpha向け $xでコンテキストを指定できるようにするためのuserchrome.jsスクリプト

Firebugの最新情報が追えるFirebug | Google グループを見ていると、Firefox3beta4くらいから最新版のFirefoxでうまく動くようにするのに手間取っているようで(先日紹介した$$1は1.2alphaでは使えなくなくなっちゃいました)ちょっと心配してたのですが、Firebugのコンソールがぜんぜん機能しないという大きな問題は乗り越えたみたいです。

ちなみにこのグループ、こないだhow to remove a cockroach from the right corner of browser? - Firebug | Google グループなんてアホな投稿(投稿した人はまじめにアイコンを変えたかったみたいですけど)が流れてきておもしろかったです。

$xにコンテキストを指定できるようにする

Firebug純正のXPathを評価するコマンド$xは、DOM要素のリストしか返せなかったり、コンテキストを指定できなくて不便なので、いろんなハックがされてきました。
  • Firebug Command Line APIを弄る($xのコンテキスト) - 0x集積蔵
  • Firebug を「カクカク化」して $x の第 2 引数でコンテキストノードを指定できるようにする。 - IT戦記
  • 俺々拡張作成法 - 例題:Firebug を「カクカク化」して $x の第 2 引数でコンテキストノードを指定できるようにする。 - IT戦記 - hogehoge
自分はuserChrome.jsを使ってuserchrome.jsにコードを書いていたのですが、いつの間にか機能しなくなっていました。だいぶんFirebugのコンソールまわりのコードも落ち着いて変更されなくなってきたみたいなのでパッチを書きました。Firebug1.2a24Xで動作を確認。
Picture 2-19

一部Nov 17 2007 :: New version of $X / nulog, NULL::something : out of the washerのコードを利用させてもらっています。ありがとうございます。

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

executeOnReady(window, ['FBL', 'getElementsByXPath'], function(newvalue) {
    return function(context, xpath) {
        if ( arguments.callee.caller ) {
            context = arguments.callee.caller.arguments[1] || context;
        }
        var doc = context.nodeType == context.DOCUMENT_NODE ? context : context.ownerDocument;
        var result = doc.evaluate(xpath, context, null, XPathResult.ANY_TYPE, null);


        var nodes = [];
// snippet from: http://lowreal.net/blog/2007/11/17/1
        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: {
                for (var item = result.iterateNext(); item; item = result.iterateNext())
                    nodes.push(item);
                return nodes;
            }
        }
    }
    return newvalue;
} );

tags

  • Firefox
  • 「Firebug1.2alpha向け $xでコンテキストを指定できるようにするためのuserchrome.jsスクリプト」のはてなブックマーク数
  • 「Firebug1.2alpha向け $xでコンテキストを指定できるようにするためのuserchrome.jsスクリプト」deliciousブックマーク数
  • 「Firebug1.2alpha向け $xでコンテキストを指定できるようにするためのuserchrome.jsスクリプト」をはてなブックマークに追加
  • save "Firebug1.2alpha向け $xでコンテキストを指定できるようにするためのuserchrome.jsスクリプト" to del.icio.us
  • 「Firebug1.2alpha向け $xでコンテキストを指定できるようにするためのuserchrome.jsスクリプト」をリアルタイムブログ検索
  • permalink
  • wedata対応バージョンのSITEINFO作成用Firefox拡張機能 AutoPagerize Iteration Detector
  • Google Gearsの位置情報取得機能(まだぜんぜん実装されてないけど)

comments

TypeKey Enabled
スタイル用のHTMLタグが使えます。
*required

trackbacks

トラックバック元エントリにこのエントリへのリンクがない場合はトラックバックを受け付けません。

http://labs.gmo.jp/mt/mt-tb.cgi/216
©2010 Kentaro Kumagai, GMO Internet Labs., GMO Internet, inc.
bits and bytes
2008 .05. 02 14:53

tagcloud

  • API1
  • C/C++2
  • E4X1
  • FUSE2
  • Firefox26
  • HTML4
  • IE1
  • MySQL1
  • OSX4
  • Opera2
  • PHP4
  • UI2
  • XML1
  • XPCOM4
  • XPath4
  • apache2
  • binary2
  • book1
  • data13
  • debug5
  • design1
  • experiments3
  • extension14
  • geo1
  • google gears2
  • google maps API1
  • greasemonkey4
  • httpd5
  • javascript19
  • linux1
  • logging2
  • mobile4
  • perl4
  • tips5
  • tool11
  • vim2
  • visualization3
  • widget1
  • wii2
  • windows7
  • サービス7
  • 和訳1

Archives

  • 2008.05 (2)
  • 2008.04 (4)
  • 2008.03 (4)
  • 2008.02 (6)
  • 2008.01 (3)
  • 2007.12 (4)
  • 2007.11 (5)
  • 2007.10 (4)
  • 2007.09 (4)
  • 2007.08 (4)
  • 2007.07 (8)
  • 2007.06 (7)
  • 2007.05 (4)
  • 2007.04 (5)
  • 2007.03 (6)
  • 2007.02 (4)
  • 2007.01 (6)

about

  • bits and bytesのXML
  • 「bits and bytes」のCreative Commons
  • Powered by Movable Type
  • イベントと地図 - モグ
  • Use ecto to blog!
  • bits and bytesのはてなブックマーク数
  • bits and bytesをMy Yahoo!に追加
  • Subscribe with Bloglines