Как получить доступ к nsIEditor элементов contentEditable? - PullRequest
0 голосов
/ 17 ноября 2011

Когда мое расширение получает доступ к элементу INPUT (тип "text") или TEXTAREA текущей отображаемой веб-страницы в Firefox, я могу использовать QueryInterface для приведения его к объекту JS типа nsIDOMNSEditableElement и тогда я могу получить доступ к ассоциированному nsIEditor, используя .editor.

Однако Firefox также поддерживает редактирование других элементов, например, любой элемент (и его дочерние элементы) доступен для редактирования, если он имеет атрибут contentEditable, установленный в true. Кроме того, весь документ можно редактировать, если для него designMode установлено значение on. В любом случае редактируемые элементы не являются экземплярами nsIDOMNSEditableElement; QueryInterface для nsIDOMNSEditableElement не удается.

Поскольку для этих редактируемых элементов также может быть включена проверка орфографии (если у них атрибут spellcheck установлен на true), я предполагаю, что с ними связан экземпляр nsIEditor.

Как бы я получить ссылку на него?

1 Ответ

2 голосов
/ 18 ноября 2011

Для редактируемых кадров (через свойство 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/.

...