Может кто-то сталкивался? Можно ли, в принципе, сделать так, что бы программа на JS вводила текст в поле на котором стоит фокус ввода? Проблема видится в том, что при клике на кнопку фокус передастся ей. Но может кто-то сталкивался? Есть ли решение у этой задачи? Скрипт будет висеть в расширении.

Я так понимаю что простой ответ «Можно» тебе не подойдёт? Попробуй посмотреть как это организовано в расширении Nightly Tester Tools... Там есть кнопка для Панели навигации «Вставить ID сборки». Чем-то напоминает твоё желание...

Что-то вроде этого:

Выделить код

Код:

var bluredEl = null;
function blurHandler (event)
{
    if (event. originalTarget. nodeName == "html:input") // или "textbox"
        bluredEl = event. originalTarget;
}
window. addEventListener ("blur", blurHandler, true);

+
<button oncommand="bluredEl.value='text';"/>

Anton пишет

Что-то вроде этого:

Выделить код

Код:

var bluredEl = null;
function blurHandler (event)
{
    if (event. originalTarget. nodeName == "html:input") // или "textbox"
        bluredEl = event. originalTarget;
}
window. addEventListener ("blur", blurHandler, true);

+
<button oncommand="bluredEl.value='text';"/>

Не. Ваще ни разу. Только в GET дату добавляет txt= и перезагружает страницу:|

Простите дурака молодого. Вроде получается. Осталось обстругать немного.

Оказываеца текстареа не теряет фокус при передаче вокуса расширению. Так что хендлер надо перевесить на событие получения фокуса ввода. Это, ведь, onfocus? Или в данном контексте надо писать просто focus?

focus и onfocus не помогли.
Как переписать вот это getBrowser().contentWindow.addEventListener("blur", blurHandler, true); чтоб повесилось на получение фокуса?

может быть, стоит обратить внимание на эту строку:

Выделить код

Код:

if (event. originalTarget. nodeName == "html:input")

?
Вместо originalTarget можно попробовать target, а вместо "html:input" - "html:textarea"...

Anton пишет

может быть, стоит обратить внимание на эту строку:

Выделить код

Код:

if (event. originalTarget. nodeName == "html:input")

?
Вместо originalTarget можно попробовать target, а вместо "html:input" - "html:textarea"...

Спасибо. Я уже обратил на них внимание и переписал. И всё работает. Но нужно перевесить обработчик с потери фокуса на его получение.

Объясняю: я пишу расширение, которое поможет мне писать комменты и посты в http://livejournal.com
Там есть фишка для зарегестрированных юзеров. Когда пишешь комментарий к чужой записи, то форма для ввода коментария строится динамически. Узнать её id мне не удалось. Вот я и задумался над универсализацией.

Так вот чтоб всё работало надо сначала поставить фокус на текстарею для добавления коммента, а потом убрать. Иначе ничего не работает. Я пришёл к выводу, что событие потери фокуса не происходит когда после того, как я кликаю на кнопке из своего тулбара.

Замена blur на focus почему-то не помогла.

чем originalTarget отличается от target?

Может следующий код из nightly tester поможет ?

Выделить код

Код:

var element = document.commandDispatcher.focusedElement;
if (element)
{
	var type = element.localName.toLowerCase();
	if ((type=="input")||(type=="textarea"))
	{
	   element. value = "...";