如何访问contentEditable元素的nsIEditor?

时间:2011-11-17 19:15:51

标签: javascript firefox dom firefox-addon xul

当我的扩展程序可以访问Firefox中当前显示的网页的INPUT(类型"text")或TEXTAREA元素时,我可以使用QueryInterface将其转换为类型为nsIDOMNSEditableElement的JS对象,然后我可以使用nsIEditor访问关联的.editor

但是,Firefox也支持其他元素可编辑,例如如果属性contentEditable设置为true,则任何元素(及其子元素)都是可编辑的。如果designMode设置为on,则可以编辑整个文档。在任何一种情况下,可编辑元素都不是nsIDOMNSEditableElement的实例; QueryInterface的{​​{1}}失败。

由于这些可编辑元素也可以启用拼写检查(如果它们将nsIDOMNSEditableElement属性设置为spellcheck),我会假设有一个与其关联的实例true。< / p>

我如何获得它的参考?

1 个答案:

答案 0 :(得分:2)

对于可编辑的框架(通过designMode属性),您可以像这样检索它:

var session = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                    .getInterface(Components.interfaces.nsIWebNavigation)
                    .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                    .getInterface(Components.interfaces.nsIEditingSession);
if (session.windowIsEditable(window)
  editor = session.getEditorForWindow(window);

关于contentEditable - 你似乎不走运。我找不到从JavaScript访问编辑器的方法:nsGenericHTMLElement类有GetEditor方法,但只能通过nsIDOMNSEditableElement接口访问,只有少数元素可以实现。 nsIAccessibleEditableText interface具有associatedEditor属性,但由于某种原因,它被标记为[noscript]contentEditable是Gecko中一个相对较新的功能,看起来有人忘了让编辑器可以访问JavaScript - 可能值得在https://bugzilla.mozilla.org/提交错误。