Расширение Firefox: Как я могу установить положение курсора? - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть страница, возможно, с несколькими редактируемыми по содержанию iframes (редакторами).

Теперь я хотел бы использовать свое собственное расширение Firefox, чтобы сделать следующее: Установка курсора в конец (или последний элемент HTML).) редактора, в котором фактически находится курсор.

Я нашел много решений для определения положения курсора, но мне нужно одно, чтобы установить его.

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 15 сентября 2010

XPCOM, вероятно, включает в себя такие функции, как часть испытательного стенда. Мочитест, по крайней мере, способен на это (опять же, вероятно, через XPCOM).

С другой стороны, когда пользователь находится в системе, это, как правило, является грубым нарушением практики взаимодействия с пользователем. Убедитесь, что у вас есть хорошее обоснование для этого. Это может показаться удобным, но что, если они делают что-то еще, используя ваше дополнение? Обычно я открываю сразу несколько приложений, расширения Fx - только часть этого. Я не хочу, чтобы это контролировало мою мышь, НИКОГДА.

Что-то не так с настройкой фокуса? По крайней мере, это только заставляет руку пользователя на уровне окна.

Это также подозревает, что это делает довольно трудным пройти проверку AMO. Вы должны были бы обосновать, почему было необходимо вызывать такую ​​низкоуровневую функциональность. Например, если вы взаимодействуете с окном, оно может повлиять на ввод ваших функций, которые в свою очередь управляют мышью ... и тогда случайный веб-сайт получит доступ к окну пользователя!

1 голос
/ 17 сентября 2010

Сам нашел решение моей проблемы.Этот код сам установит позицию курсора на последний абзац моего редактора:

var frame = window.content.document.getElementsByTagName('iframe')[2];
var win = frame.contentWindow;
var editingSession = Components.classes["@mozilla.org/editor/editingsession;1"].createInstance(Components.interfaces.nsIEditingSession);
var editor = editingSession.getEditorForWindow(win);

selection = window.getSelection();            

var body = frame.contentDocument.body;

text = frame.contentDocument.createTextNode(".");
body.lastChild.appendChild(text);  // add textnode to be selected

var range = editor.document.createRange();   
range.setStartBefore(text);
range.setEndAfter(text);
editor.selection.removeAllRanges();
editor.selection.addRange(range);

body.lastChild.removeChild(text); // remove Child
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...