2011-11-17 32 views
0

當我的分機獲得訪問某個INPUT(類型"text"),或在Firefox當前顯示的網頁的​​3210元素,我可以用QueryInterface它轉換爲nsIDOMNSEditableElement類型的JS對象,然後我可以使用.editor訪問關聯nsIEditor如何訪問contentEditable元素的nsIEditor?

但是,Firefox支持其他元素也是可編輯的,例如,如果任何元素(及其子元素)的屬性contentEditable設置爲true,則它是可編輯的。此外,如果整個文檔的designMode設置爲on,則可以編輯整個文檔。無論哪種情況,可編輯元素都不是nsIDOMNSEditableElement的實例; QueryInterfacensIDOMNSEditableElement失敗。

由於這些編輯的元素也可以拼寫檢查啓用(如果他們有屬性spellcheck設置爲true),我認爲有與它們相關的實例nsIEditor

我該如何得到它的參考?

回答

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/處提供一個錯誤。