SpiderMonkey 自体には、イベント処理に関するものは何もありません。イベントは純粋に DOM のものです。
クリック イベントは、SpiderMonkey 自体ではなく、ブラウザ コード (SpiderMonkey を埋め込んだもの) によって発生します。クリックなどのディスパッチを担当するコードについては、http://hg.mozilla.org/mozilla-central/file/e60b8be7a97b/content/events/src/nsEventStateManager.cppを参照してください。
ブラウザーは、プロパティへの割り当てを受け取り、onclick
それをイベント リスナーの登録に変換するセッター メソッドを定義するものでもあります。http://hg.mozilla.org/mozilla-central/file/e60b8be7a97b/dom/base/nsDOMClassInfo.cpp#l7624を参照してください。これは、から呼び出されnsEventReceiverSH::SetProperty
、名前 (id
このコードでは) がIsEventName
テストに合格したプロパティを処理します。
イベント リスナーが登録され、イベントが発生すると、イベント ディスパッチャーがリスナーへの呼び出しを管理します。nsJSEventListener
あなたが見つけたリンクは、C++HandleEvent
呼び出しを JS 関数の呼び出しに変換する接着剤です。
したがって、あなたの場合、リスナーに何らかの登録/登録解除メカニズムが必要であり、実装によってイベントが発生し、リスナーにディスパッチされます。この最後の部分をどのように行うかはかなり自由です。Gecko の実装には、DOM Events 仕様を実装する必要があるため、多くの制約がありますが、もっと簡単なことを実行できるはずです。