当我的扩展程序可以访问Firefox中当前显示的网页的INPUT
(类型"text"
)或TEXTAREA
元素时,我可以使用QueryInterface
将其转换为类型为nsIDOMNSEditableElement
的JS对象,然后我可以使用nsIEditor
访问关联的.editor
。
但是,Firefox也支持其他元素可编辑,例如如果属性contentEditable
设置为true
,则任何元素(及其子元素)都是可编辑的。如果designMode
设置为on
,则可以编辑整个文档。在任何一种情况下,可编辑元素都不是nsIDOMNSEditableElement
的实例; QueryInterface
的{{1}}失败。
由于这些可编辑元素也可以启用拼写检查(如果它们将nsIDOMNSEditableElement
属性设置为spellcheck
),我会假设有一个与其关联的实例true
。< / p>
我如何获得它的参考?
答案 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/提交错误。