Javascript 如何访问contentEditable元素的编辑器?
当我的分机访问Firefox中当前显示网页的Javascript 如何访问contentEditable元素的编辑器?,javascript,firefox,dom,firefox-addon,xul,Javascript,Firefox,Dom,Firefox Addon,Xul,当我的分机访问Firefox中当前显示网页的输入(键入“text”)或TEXTAREA元素时,我可以使用QueryInterface将其强制转换为类型为nsIDOMNSEditableElement的JS对象,然后我可以使用.editor访问关联的nsIEditor 但是,Firefox也支持其他可编辑元素,例如,如果属性contentEditable设置为true,则任何元素(及其子元素)都是可编辑的。此外,如果将designMode设置为on,则整个文档可以编辑。无论哪种情况,可编辑元素都不
输入
(键入“text”
)或TEXTAREA
元素时,我可以使用QueryInterface
将其强制转换为类型为nsIDOMNSEditableElement
的JS对象,然后我可以使用.editor
访问关联的nsIEditor
但是,Firefox也支持其他可编辑元素,例如,如果属性contentEditable
设置为true
,则任何元素(及其子元素)都是可编辑的。此外,如果将designMode
设置为on
,则整个文档可以编辑。无论哪种情况,可编辑元素都不是nsIDOMNSEditableElement
的实例<对于nsIDOMNSEditableElement
的code>QueryInterface失败
由于这些可编辑元素也可以启用拼写检查(如果它们的属性spellcheck
设置为true
),我假设有一个实例nsIEditor
与它们关联
如何获取对它的引用?对于可编辑帧(通过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
接口访问。有一个关联编辑器
属性,但由于某种原因,它被标记为[noscript]
contentEditable
是Gecko中一个相对较新的功能,看起来好像有人忘了让编辑器可以通过JavaScript访问——可能值得一提