Webアプリケーション側JavaScriptと,ブラウザ拡張(Firefox add-onなど)のJavaScript間でデータのやりとり,メソッドの呼び出しをすることは可能でしょうか.

具体的には,AJAXアプリケーション開発者が,ページ上の要素を変更するタイミングで,ブラウザ拡張側のイベントハンドラを呼ぶ,ということをしたいです.
https://developer.mozilla.org/ja/DOM/elementを見るとelement.onchangeというものがあるようですが,より柔軟に,Webアプリケーション提供者が独自にイベントを定義し,chrome拡張やFirefoxアドオン開発者がonload時にそのイベントに登録,などの仕組みを普通のブラウザ環境の上に構築することは可能でしょうか.

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/05/08 02:12:36
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493

ポイント100pt

できます。例えに出されたonchangeはformのラジオボタンなどが変更されたときに発火するイベントなので趣旨と違います。

「要素を変更するタイミング」といってもいろいろあるので提示してもらえれば最適なイベントをアドバイスできると思います。
例えば

  • 属性が変更された - DOMAttrModified
  • 要素が追加された - DOMNodeInserted
  • form要素などDOM Level 1で定義されているものなら、change,selectとか


独自イベントではなく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

id:wens31

丁寧なご回答ありがとうございます!
DOMNodeInsertedのようなものがイメージに近いですが,単にDOM要素が挿入されたというだけでなく,様々な挿入のされ方を判別できる方法はないかと考えておりました.ご教示いただいた独自イベント発生方法はまさに,こういうのがあれば良いなと考えていたそのものです.
また,実際にAutoPagerizeでは独自イベントが用いられているのですね.実用の例として大変興味深いです.ありがとうございました.

2012/05/08 02:12:27
  • id:wens31
    http://d.hatena.ne.jp/shim0mura/20111224/1324735206
    を見るに独自イベントの定義は出来るっぽいですね.
    解答はしばらく閉じないので,実際にやってみたとか,このサービスはそういうことをやっている,などありましたらご回答くださいませ.

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません