SpiderMonkey本身没有涉及事件处理的任何内容。事件纯粹是DOM的事情。
click事件由浏览器代码(嵌入SpiderMonkey的东西)触发,而不是由SpiderMonkey本身触发。看到 http://hg.mozilla.org/mozilla-central/file/e60b8be7a97b/content/events/src/nsEventStateManager.cpp 对于负责发送点击等内容的代码。
浏览器也定义了赋值给它的setter方法 onclick 属性并将其转换为事件监听器注册。看到 http://hg.mozilla.org/mozilla-central/file/e60b8be7a97b/dom/base/nsDOMClassInfo.cpp#l7624 这是从 nsEventReceiverSH::SetProperty 并处理其名称的属性(id 在这段代码中)传递了 IsEventName 测试。
注册事件侦听器并触发事件时,事件调度程序管理对侦听器的调用;该 nsJSEventListener 你找到的链接是转换C ++的粘合剂 HandleEvent 调用对JS函数的调用。
因此,在您的情况下,您需要为侦听器提供某种注册/取消注册机制,然后您的实现将触发事件并将它们分发给侦听器。你如何做到最后一部分是非常开放的;由于需要实现DOM Events规范,Gecko实现有很多限制,但是你应该能够做更简单的事情。