具体的には,AJAXアプリケーション開発者が,ページ上の要素を変更するタイミングで,ブラウザ拡張側のイベントハンドラを呼ぶ,ということをしたいです.
https://developer.mozilla.org/ja/DOM/elementを見るとelement.onchangeというものがあるようですが,より柔軟に,Webアプリケーション提供者が独自にイベントを定義し,chrome拡張やFirefoxアドオン開発者がonload時にそのイベントに登録,などの仕組みを普通のブラウザ環境の上に構築することは可能でしょうか.
できます。例えに出されたonchangeはformのラジオボタンなどが変更されたときに発火するイベントなので趣旨と違います。
「要素を変更するタイミング」といってもいろいろあるので提示してもらえれば最適なイベントをアドバイスできると思います。
例えば
独自イベントではなくDOMで定義されているイベント一覧。
DOM events - Wikipedia, the free encyclopedia
webアプリケーション側で独自のイベントを発生するなら、
ブラウザ拡張側でイベントをキャッチするには、addEventListenerを使って監視します。
イベントは要素を指定して発火させることになるので拡張と通信する場合は大体 documentかwindowに対してイベントを起こします。
jQueryを使った例。
//拡張側 $(window).bind('hateq',function(){alert(1)}); //サイト側 $(window).trigger('hateq');
ページを継ぎ足す拡張の ”AutoPagerize” は継ぎ足された後にAutoPagerize_DOMNodeInsertedイベントを発生させるのでこれを監視して連携できるようにしています。
参考:AutoPagerizeで継ぎ足された部分に自分のスクリプトを適用する方法あれこれ - 0xFF
丁寧なご回答ありがとうございます!
2012/05/08 02:12:27DOMNodeInsertedのようなものがイメージに近いですが,単にDOM要素が挿入されたというだけでなく,様々な挿入のされ方を判別できる方法はないかと考えておりました.ご教示いただいた独自イベント発生方法はまさに,こういうのがあれば良いなと考えていたそのものです.
また,実際にAutoPagerizeでは独自イベントが用いられているのですね.実用の例として大変興味深いです.ありがとうございました.