Firefox扩展不能覆盖元素事件

Firefox Extension cannot override element events

本文关键字:元素 事件 覆盖 不能 扩展 Firefox      更新时间:2023-09-26

我在试图覆盖表单元素的onsubmit事件时遇到了麻烦。我用addEventListener添加侦听器没有问题,但对于我的特殊情况,我需要替换 onsubmit,但由于某种原因,当我这样做时,它给了我这个错误:

Error: Component is not available = NS_ERROR_NOT_AVAILABLE

我的代码很简单:

gBrowser.contentDocument.getElementById("theform").onsubmit = function() {
   return false;
};

本质上我想阻止表单提交,但是这段代码失败并抛出上述错误。使用addEventListener返回false似乎并不能阻止表单提交。

谢谢。

出于安全原因,扩展中getElementById返回的对象是DOM元素周围的XPCNativeWrapper;不是元素本身。这导致了一些重要的限制。更多细节在这里:

在DOM节点或窗口对象的XPCNativeWrapper上赋值或读取on*属性将抛出异常。(使用addEventListener代替,如果之前使用"return false;",则在处理程序中使用"event.preventDefault();")

  • https://developer.mozilla.org/en/XPCNativeWrapper Limitations_of_XPCNativeWrapper