Сам SpiderMonkey не имеет ничего, связанного с обработкой событий.События - это просто вещь DOM.
Событие click запускается кодом браузера (который встраивает 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, но вы должны быть в состоянии сделать что-то гораздо более простое.