Только начал осваивать разработку расширений для FF.

Вот вопрос: как добраться до загруженной страницы? До её DOM. Конкретно надо будет прочитать, обработать и изменить textNode вложенный в некоторые элементы.

http://xpoint.ru/forums/programming/XUL/thread/33865.xhtml

Спасибо.

Возник ещё вопрос. Допустим в документе имеется форма. В форме поле ввода. Когда скрипт пишется для страницы там можно доступ к полю ввода получить примерно так: document.form[0].textarea[0]. Или по имени если оно известно.

Можноль как-то сделать так же из расширения?

Выделить код

Код:

var myExVar =
{
  getContent: function() {
    var cont = getBrowser().contentWindow;
    try {
      cont = new XPCNativeWrapper(cont).wrappedJSObject;
    } catch(e) { return 0}
    if (!cont) cont = getBrowser().contentWindow;
    return cont;
  },

  execute: function() {
    var doc = this.getContent().document;
    alert(doc.form[0]);//вот вам и форма
  }
}

myExVar.execute();

Чёт не хочет.

Вообще где можно найти скольконибудь нормальное пособие по разработке расширений к FF на русском?

А то везде долго и нудно пишут про великий XUL, а потом вскользь упоминают, что осталось только написать код на JS. А сделать это не проблема. Надо только JS знать.

А то везде долго и нудно пишут про великий XUL, а потом вскользь упоминают, что осталось только написать код на JS. А сделать это не проблема. Надо только JS знать.

У меня такая же фигня. JS все испортил. :)

igorsub пишет

А то везде долго и нудно пишут про великий XUL, а потом вскользь упоминают, что осталось только написать код на JS. А сделать это не проблема. Надо только JS знать.

У меня такая же фигня. JS все испортил. :)

Фишка в том, что знать язык чтоб писать на нём не достаточно. Что я расширения писать буду чтоб двойку с двойкой складывать?

Sarin2.0 пишет

Вообще где можно найти скольконибудь нормальное пособие по разработке расширений к FF на русском?
...

См. "прибитые" в этом разделе темы.

Вообще говоря, разработка js-кода расширений подобна разработке js-кода html-страниц. Разница лишь в структуре документа - js-код html-страницы получает доступ к элементам через document, а js-код расширения - через window. contentDocument (если для текущей вкладки).

Anton пишет
Sarin2.0 пишет

Вообще где можно найти скольконибудь нормальное пособие по разработке расширений к FF на русском?
...

См. "прибитые" в этом разделе темы.

Вообще говоря, разработка js-кода расширений подобна разработке js-кода html-страниц. Разница лишь в структуре документа - js-код html-страницы получает доступ к элементам через document, а js-код расширения - через window. contentDocument (если для текущей вкладки).

И это всё? Я JS знаю неплохо. С DOM работал.

Sarin2.0 пишет

...
И это всё?...

А что ещё нужно ? Ведь

...Я JS знаю неплохо. С DOM работал.

Тем более, как говорится "карты в руки". Получаешь контент (window. content или window. contentDocument или как там ещё, не помню) и с помощью DOM API находишь нужную форму, в ней - нужный textarea и работаешь с ним.
Подробней о доступе к контенту посмотри здесь: http://xpoint.ru/forums/programming/XUL … 3865.xhtml

Через DOM косячит. TextNode добавляется. Но вот работать с этим текстом тяжело. Как оказалось текст введённый пользователем не является TextNode, а через getAttribute('value') не получаетца.

Sarin2.0, я по началу тоже перепугался =) На самом деле все действительно просто. Как разбирался я:

1. Прочитал вот эту статью и сделал перевод. Перевод можно заменить трехкратным прочтением =) Основы в голове улеглись.

2. Прочитал ветку про XUL на xpoint. С самого начала. Там описаны решения всех новичковых проблем. Берем на заметку.

3. Проглядываем http://xulplanet.com/ на предмет "что там вообще есть". Начинаем что-то писать. Когда возникают технические вопросы - лезем на xulplanet и находим решение =) Еще полезно держать под рукой шпаргалку по XUL - благо она русскоязычная и там почти все есть. Поскольку периодически приходится перегружать chrome, лучше сразу открыть все маны и доки в опере =)

4. Мне лично очень помогает. Если нифига не получается, идем на xpoint задавать вопрос (помня, что люди там серьезные и дергать их по пустякам не стоит). Выкуриваем сигаретку и начинаем формулировать, в чем наша проблема. Подробно, со всеми нюансами. Обычно через 5 минут удается найти решение, т.к. правильно сформулированный вопрос содержит половину ответа =)

5. Advanced. Достаем куда-нибудь содержимое архива C:\Program Files\Mozilla Firefox\chrome\browser.jar, особенно нас интересует папка browser. В ней лежит весь интерфейс, который мы переопределяем. Очень полезно его изучить.

6. Самый простой способ внедрить какую-то фичу - вспомнить расширение, где реализованно что-то подобное. Распаковать и посмотреть, как это сделано.

разработка js-кода расширений подобна разработке js-кода html-страниц

Готов согласиться с этим утверждением.

Sarin2.0 пишет

Через DOM косячит. TextNode добавляется...

Это не "косячит". Это значит textnode там действительно есть. Это значит что код страницы отформатирован примерно так:

Выделить код

Код:

<tag1>
    <tag2>
    ...
    </tag2>
</tag1>

Если бы он был написан так:

Выделить код

Код:

<tag1><tag2>...</tag2></tag1>

то не было бы никаких textnode.

...Но вот работать с этим текстом тяжело. Как оказалось текст введённый пользователем не является TextNode, а через getAttribute('value') не получаетца.

В смысле ? У textnode нет атрибута value ?

Знаю. Я не про тектноде. Есть текстарея. Надо до неё добраться. Я говорил про свойство value этой тектареи. То самое, с которым можно через JS работать без всяких DOMов. Так вот нету его:)

Sarin2.0 пишет

...Я говорил про свойство value этой тектареи. То самое, с которым можно через JS работать без всяких DOMов. Так вот нету его:)

А и точно нету :) Попробуй так: element. value, где element - найденный textarea.

ps: вот мой код, "заточенный" для формы ответа этого форума:

Выделить код

Код:

function getTopWin ()
{
    var windowManager = Components. classes ['@mozilla.org/appshell/window-mediator;1']. getService();
    var windowManagerInterface = windowManager.
                                 QueryInterface (Components. interfaces. nsIWindowMediator);
    var topWindowOfType = windowManagerInterface. getMostRecentWindow ("navigator:browser");
    
    if (topWindowOfType)
    {
        return topWindowOfType;
    }
    return null;
}

function getContent ()
{
    var cont = getTopWin (). getBrowser (). contentDocument;
    var c2 = cont;
    try
    {
        cont = new XPCNativeWrapper (cont). wrappedJSObject;
    } catch(e) {}
    if (!cont)
        cont = c2;
    return cont;
}
var x = getContent ();
var f = x. getElementById ("post");
var i = f. getElementsByTagName ("textarea");
for (var j = 0; j < i. length; j++)
if (i [j]. name == "req_message")
print (i [j]. value);
Anton пишет
Sarin2.0 пишет

...Я говорил про свойство value этой тектареи. То самое, с которым можно через JS работать без всяких DOMов. Так вот нету его:)

А и точно нету :) Попробуй так: element. value, где element - найденный textarea.

Феноменально. Работает. Но ведь не должно!

В любом случае я тестил на простом ХТМЛе. Свой тулбар я поломал и чинить его долго (см. соседний топик про манифест:))

Вот что работает:

Выделить код

Код:

<script>
function f(){
  alert(document.getElementById('txt'));
  text = document.createTextNode('Yo');
  document.getElementById('txt').appendChild(text);
}

function f2(){

  alert(document.getElementById('txt').value);
}
</script>
<textarea id="txt">
</textarea>

<input type="button" onclick="f();" value="123"><input type="button" onclick="f2();" value="321">