nsIEventListenerService でDOMイベントリスナを列挙する

modest に投稿した記事と同内容です。

nsIEventListenerService というXPCOMサービスを使うと、 XUL や HTML ドキュメント内のある要素に対してどんなDOMイベントリスナが追加されているかを調べることができます。以下は、 browser.xul にてFirefoxの「ホーム」ボタンに追加されたイベントリスナをエラーコンソールに列挙するサンプルです。

var els = Cc["@mozilla.org/eventlistenerservice;1"].
          getService(Ci.nsIEventListenerService);
var infos = els.getListenerInfoFor(document.getElementById("home-button"), {});
infos.forEach(function(info) {
    Application.console.log(info.type + " => " + info.toSource());
});

nsIEventListenerService の getListenerInfoFor メソッドは、引数で渡した要素のイベントリスナの情報を、 nsIEventListenerInfo オブジェクトの配列として返します。さらに、各 nsIEventListenerInfo オブジェクトについて、 type プロパティでイベントリスナの種類(click, keypress, mousedown など)を調べたり、 JavaScript のリスナであれば toSource() で内容を文字列化したりできます。ただし、 nsIEventListenerInfo オブジェクトはイベントリスナそのものではないので、 getListenerInfoFor で取得したイベントリスナを removeEventListener で削除する、といったことはできません。あくまでもデバッグ用です。

なお、 nsIEventListenerService は Firefox 3.6 (Gecko 1.9.2) 以降で利用可能です。

TOP

1 Comment to “nsIEventListenerService でDOMイベントリスナを列挙する”

[…] SCRAPBLOG : nsIEventListenerService でDOMイベントリスナを列挙する http://www.xuldev.org/blog/?p=563 – view page – cached nsIEventListenerService というXPCOMサービスを使うと、 XUL や HTML ドキュメント内のある要素に対してどんなDOMイベントリスナが追加されているかを調べることができます。以下は、 browser.xul Tweets about this link Topsy.Data.Twitter.User['wingedlove_feed'] = {"location":"","photo":"http://a1.twimg.com/profile_images/785281914/_______normal.jpg","name":"Tomo Mars","url":"http://twitter.com/wingedlove_feed","nick":"wingedlove_feed","description":"wingedlove(http://twitter.com/wingedlove)が作ったfeed専用アカウントです。feed内容に興味ある方がいればフォローまたはフォロー外しはご自由に。","influence":""}; wingedlove_feed: “[firefox] nsIEventListenerService でDOMイベントリスナを列挙する http://dlvr.it/jdgb ” 13 hours ago view tweet retweet Topsy.Data.Twitter.User['noyo0429sg'] = {"location":"","photo":"http://a1.twimg.com/profile_images/784655282/John_Lennon_John_smile_normal.jpg","name":"ビートよし","url":"http://twitter.com/noyo0429sg","nick":"noyo0429sg","description":"","influence":""}; noyo0429sg: “nsIEventListenerService でDOMイベントリスナを列挙する http://dlvr.it/jdNc ” 13 hours ago view tweet retweet Filter tweets […]

TOP

TOP