Mozilla: плагины и расширения
От: xorandor  
Дата: 27.06.07 22:32
Оценка:
Вот поставил себе Mozilla Thunderbird. Хорошая штука, но почемуто разработчики не предусмотрели в ней возможность сворачивания в трей. Ладно, не беда, думаю, прикручу эту фичу сам, да не тут-то было! Ничего не могу понять в архитектуре её плагинов и расширений. Вот как всё просто у Винампа — кинул свою длл'ку в папку Plugins и радуешься, а тут какие-то XPI'ки (которые, на самом деле, ZIP-архивы) набитые JS'ами, и ещё непонятно чем. Порылся в гугле, он упорно посылает на www.mozilla-russia.org, но не могу я там ничего толкового найти (в основном там всё про Firefox). Написал на первое время отдельную программку, которая запускает Thunderbird, хучит его, сабклассит, и вообще ведёт себя с ней крайне жестоко Но, тем не менее, хочется всё сделать по взрослому. Чтоб можно было это расширение устанавливать и запускать предназначенными для этого средствами. Чтоб красиво было. Поэтому, не подкинет ли кто ссылок на толковую инфу по этому вопросу? Или может поделится какими-то своими наработками? Спасибо.
Re: Mozilla: плагины и расширения
От: mikko  
Дата: 28.06.07 06:46
Оценка: 2 (1)
Здравствуйте, xorandor, Вы писали:

X>… не подкинет ли кто ссылок на толковую инфу по этому вопросу? ….


У меня валялось несколько ссылок…

Setting up extension development environment
Install.rdf
package – Windows build script
Writing Firefox/Thunderbird Extensions
How to create Firefox extensions
Enabling Extension Updates
Re: Mozilla: плагины и расширения
От: Sergey J. A. Беларусь  
Дата: 28.06.07 06:59
Оценка:
Здравствуйте, xorandor, Вы писали:

X>Вот поставил себе Mozilla Thunderbird. Хорошая штука, но почемуто разработчики не предусмотрели в ней возможность сворачивания в трей.


Я пользуюсь этим:

http://minimizetotray.mozdev.org/

Правда есть небольшие недоделки, но пользоватся можно.

GoJanus для FireFox
Re[2]: Mozilla: плагины и расширения
От: xorandor  
Дата: 28.06.07 11:09
Оценка:
Здравствуйте, mikko, Вы писали:

M>У меня валялось несколько ссылок…

M>...

Спасибо! Уже что-то проясняется. Даже добился того, чтобы Громоптица склевала таки мою длл'ку Расширение в списке присутствует, красота! Буду дальше шаманить...

ЗЫ: Кто ещё чего знает по этой теме, делитесь, не стесняйтесь
Re[2]: Mozilla: плагины и расширения
От: xorandor  
Дата: 28.06.07 11:11
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Я пользуюсь этим:

SJA>...

Да их много, я видел. Просто хочется чтоб всё было что называется "со своего огорода"
Re[3]: Mozilla: плагины и расширения
От: Sergey J. A. Беларусь  
Дата: 28.06.07 11:22
Оценка:
Здравствуйте, xorandor, Вы писали:

X>Спасибо! Уже что-то проясняется. Даже добился того, чтобы Громоптица склевала таки мою длл'ку Расширение в списке присутствует, красота! Буду дальше шаманить...


Ну, есть у меня аддон один, в котором используется XPCOM. Он весьма простой, поэтому думаю его легко будет понять.
Хотя судя по словам

мою длл'ку

ты уже собирал какой-то XPCOM компонент ? Или это был всё-таки .xpi ?

GoJanus для FireFox
Re[4]: Mozilla: плагины и расширения
От: xorandor  
Дата: 28.06.07 11:48
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Ну, есть у меня аддон один, в котором используется XPCOM. Он весьма простой, поэтому думаю его легко будет понять.

SJA>Хотя судя по словам "мою длл'ку" ты уже собирал какой-то XPCOM компонент ? Или это был всё-таки .xpi ?

Я, если честно, пока даже понятия не имею, что такое XPCOM-сомпонент Как я говорил выше, я уже смастерил отдельную программку (EXE и DLL) которая запускает Thunderbird и фильтрует её сообщения на нажатие кнопки "Закрыть" и сообщения от иконки в трее (которую создаёт моя программа), и, если таковое происходит, то (из подменённой WndProc) сворачивает/восстанавливает окно. Просто хотелось это реализовать по нормальному, чтоб был именно XPI-файл, из которого можно установить расширение, полюбоваться на него, висящего в списке установленных расширений, и даже удалить оттуда, если понадобится. Вроде получается потихоньку, но с этими RDF'ами и JS'ами ещё разбираться и разбираться. Кроме того, чтобы всё было как у людей, неплохо бы впихнуть многоязыковую поддержку (это кажется не сложно, но как потом JS'ы с библиотекой связать? Или там можно все менюшки и окна настроек в XUL'ах описать?), вобщем хочется изучить предмет поподробнее... Конечно, чисто для своих нужд мне хватит и того, что уже есть, но ведь, потом может захотеться и с миром поделиться =)
Re[5]: Mozilla: плагины и расширения
От: Sergey J. A. Беларусь  
Дата: 28.06.07 12:18
Оценка:
Здравствуйте, xorandor, Вы писали:

X>Я, если честно, пока даже понятия не имею, что такое XPCOM-сомпонент

Что-бы добратся до платформенно-зависимого кода. Т.е. тебе нужно будет работать с треем, а такого апи в XUL-е нет(а может я просто не знаю). Поэтому нужен компонент, из которого ты сможеш добратся до WinAPI — XPCOM компонент.


X> Кроме того, чтобы всё было как у людей, неплохо бы впихнуть многоязыковую поддержку

Это в принципе не сложно. Правда я долго бился головой, пока всё сделал правильно. Принцип простой, но документация почему-то кривая и долго ничего не получалось.

GoJanus для FireFox
Re[6]: Mozilla: плагины и расширения
От: xorandor  
Дата: 28.06.07 13:00
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

X>>Поэтому нужен компонент, из которого ты сможеш добратся до WinAPI — XPCOM компонент.

Спасибо, теперь понятно что это за зверь такой. Будем изучать сей предмет потихоньку, а пока буду довольствоваться тем что моя библиотека просто загружается. На первое время этого хватит для реализации идеи. Кстати, я правильно понял, что все события окна Thunderbird можно в этих скриптах отлавливать и обрабатывать, без всякого сабклассинга?
Re[7]: Mozilla: плагины и расширения
От: Sergey J. A. Беларусь  
Дата: 28.06.07 13:03
Оценка:
Здравствуйте, xorandor, Вы писали:

X>Кстати, я правильно понял, что все события окна Thunderbird можно в этих скриптах отлавливать и обрабатывать, без всякого сабклассинга?


Ну, можно отлавливать все события от XUL элементов, из которых состоит Thunderbird. А если ты об обычных виндовых событиях WM_xxxx, то наверное нет... Хотя точно не знаю.

GoJanus для FireFox
Re[6]: Mozilla: плагины и расширения
От: Everon  
Дата: 28.06.07 21:43
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Здравствуйте, xorandor, Вы писали:


X>>Я, если честно, пока даже понятия не имею, что такое XPCOM-сомпонент

SJA>Что-бы добратся до платформенно-зависимого кода. Т.е. тебе нужно будет работать с треем, а такого апи в XUL-е нет(а может я просто не знаю). Поэтому нужен компонент, из которого ты сможеш добратся до WinAPI — XPCOM компонент.
Както тоже пытался понять принцип такого связывания, но ничего не вышло. Вот например, в экстеншнах которые используют WinAPI всегда имеется два файла: *.xpt и *.dll, и я чегото не пойму, они в паре создают переходник из JavaScript к API или *.xpt — это переходник к конкретной *.dll? Т.е. вызывая чтото из скриптов, через, *.xpt можно добраться до экспортируемых функций *.dll или как? Если в паре и ко всем API, то зачем собирать разные XPCOM компоненты для каждого экстеншна? Если к конкретной библиотеке, то почему она собирается вместе с компонентом, почему нельзя скомпилировать её отдельно, а компонент отдельно?
Re[7]: Mozilla: плагины и расширения
От: Sergey J. A. Беларусь  
Дата: 29.06.07 06:51
Оценка:
Здравствуйте, Everon, Вы писали:

X>>>Я, если честно, пока даже понятия не имею, что такое XPCOM-сомпонент

SJA>>Что-бы добратся до платформенно-зависимого кода. Т.е. тебе нужно будет работать с треем, а такого апи в XUL-е нет(а может я просто не знаю). Поэтому нужен компонент, из которого ты сможеш добратся до WinAPI — XPCOM компонент.
E>Както тоже пытался понять принцип такого связывания, но ничего не вышло. Вот например, в экстеншнах которые используют WinAPI всегда имеется два файла: *.xpt и *.dll, и я чегото не пойму, они в паре создают переходник из JavaScript к API или *.xpt — это переходник к конкретной *.dll? Т.е. вызывая чтото из скриптов, через, *.xpt можно добраться до экспортируемых функций *.dll или как?

xpt это библиотека типов. Сам платфоременнозависимый код компонента находится в dll. Т.е. JS основываясь на данных о типах из xpt дёргает методы из dll.
Т.е. например что-бы доступится к API из VBA нужно написать COM компонент. Тут то-же самое, только называется по другому
COM (.tlb + .dll) === XPCOM (.xpt + .dll)

GoJanus для FireFox
Re[8]: Mozilla: плагины и расширения
От: Everon  
Дата: 29.06.07 10:56
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>xpt это библиотека типов. Сам платфоременнозависимый код компонента находится в dll. Т.е. JS основываясь на данных о типах из xpt дёргает методы из dll.

SJA>Т.е. например что-бы доступится к API из VBA нужно написать COM компонент. Тут то-же самое, только называется по другому
SJA>COM (.tlb + .dll) === XPCOM (.xpt + .dll)
Мда, понятно, что ничего непонятно Вот написал я допустим экстеншн добавляющий кнопку в тулбар файрфокса, как теперь мне из кода на JavaScript, обрабатывающего эту кнопку, вызвать скажем апишний MessageBox с текстом "Йа програмко =)" и чтобы этот текст был взят из папки locale моего екстеншна?
Re[9]: Mozilla: плагины и расширения
От: Everon  
Дата: 29.06.07 11:14
Оценка:
Мне только этот момент уловить бы. Как обрабатывать кнопки и что должно лежать в "locale" я знаю, со структурой *.rdf и *.dtd тоже знаком. Понять бы только как добраться из этого всего до родного WinAPI
Re[10]: Mozilla: плагины и расширения
От: Sergey J. A. Беларусь  
Дата: 29.06.07 12:40
Оценка: 3 (1)
Здравствуйте, Everon, Вы писали:

E>Мне только этот момент уловить бы. Как обрабатывать кнопки и что должно лежать в "locale" я знаю, со структурой *.rdf и *.dtd тоже знаком. Понять бы только как добраться из этого всего до родного WinAPI


Это делается так (на примере моего расширения):

1. Пишем интерфейс компонента (IMessageBoxer.idl).

#include "nsISupports.idl"

[scriptable, uuid(90758A97-A6F3-4ea4-8953-16BD2EE3A978)]
interface IMessageBoxer : nsISupports
{
  void ShowMessage(in string);
};


2. Пишем реализацию (MessageBoxer.cpp):
#include "nsIGenericFactory.h"
#include "windows.h"
...

NS_GENERIC_FACTORY_CONSTRUCTOR(MessageBoxer)

NS_IMPL_ISUPPORTS1(MessageBoxer, IMessageBoxer)

MessageBoxer::MessageBoxer() {}

MessageBoxer::~MessageBoxer() {}

NS_IMETHODIMP MessageBoxer::MessageBox(string s)
{
  ::MessageBox(...);
    return NS_S_OK;
}

static nsModuleComponentInfo components[] =
{
    {
       MESSAGEBOXER_CLASSNAME, 
       MESSAGEBOXER_CID,
       MESSAGEBOXER_CONTRACTID,
       MessageBoxerConstructor,
    }
};

NS_IMPL_NSGETMODULE("MessageBoxerModule", components)


3. Компилим IMessageBoxer.idl + MessageBoxer.cpp => IMessageBoxer.xpt + MessageBoxer.dll

4. Регистрируем компонент во время инсталяции аддона. Точно не помню как, если надо — посмотрю.

5. Используем из JavaScript
var messageboxer_xpcom = Components.classes['@programmer.gmail.com/MessageBoxer;1'].
    createInstance(Components.interfaces.IMessageBoxer);

try
{
    messageboxer_xpcom.MessageBox("Bla bla bla");
}
catch(e)
{
}

GoJanus для FireFox
Re[11]: Mozilla: плагины и расширения
От: Everon  
Дата: 29.06.07 13:05
Оценка:
Остальные нужные API-функции добавляются по аналогии с этим?
MessageBoxer::MessageBoxer() {}

MessageBoxer::~MessageBoxer() {}

NS_IMETHODIMP MessageBoxer::MessageBox(string s)
{
  ::MessageBox(...);
    return NS_S_OK;
}



SJA>3. Компилим IMessageBoxer.idl + MessageBoxer.cpp => IMessageBoxer.xpt + MessageBoxer.dll

Можно делать по этой инструкции?

SJA>4. Регистрируем компонент во время инсталяции аддона. Точно не помню как, если надо — посмотрю.

Если не затруднит Хотя чтоб узнать как, думаю достаточно разобрать какой-нибудь готовый экстеншн, не так ли?

Спасибо за развёрнутый ответ. Будет чем себя развлеч в выходные
Re[12]: Mozilla: плагины и расширения
От: Sergey J. A. Беларусь  
Дата: 29.06.07 13:32
Оценка: 2 (1)
Здравствуйте, Everon, Вы писали:

E>Остальные нужные API-функции добавляются по аналогии с этим?

E>
E>MessageBoxer::MessageBoxer() {}

E>MessageBoxer::~MessageBoxer() {}

E>NS_IMETHODIMP MessageBoxer::MessageBox(string s)
E>{
E>  ::MessageBox(...);
E>    return NS_S_OK;
E>}
E>


Да.

SJA>>3. Компилим IMessageBoxer.idl + MessageBoxer.cpp => IMessageBoxer.xpt + MessageBoxer.dll

E>Можно делать по этой инструкции?
Чесно говоря не знаю. Почему-то все инструкции были достаточно кривыми (ну или мои руки ...) и не одна не помогла сразу и полностью.
Пришлось пробовать разные варианты. После этих всех попыток и неудач у меня сложилось впечатление, что в любой момент моё расширение может перестать работать.
Но это отностися только к XPCOM. Остальная часть — XUL/JS работает стабильно.

SJA>>4. Регистрируем компонент во время инсталяции аддона. Точно не помню как, если надо — посмотрю.

E>Если не затруднит Хотя чтоб узнать как, думаю достаточно разобрать какой-нибудь готовый экстеншн, не так ли?
Тут работа навалилась, поэтому не могу отвлечся. Выкладываю свой аддон.
http://files.rsdn.ru/12991/GoJanusFF.zip
Можно либо разобратся с ним, или просто использовать как основу для другого плагина переименовав все имена.

GoJanus для FireFox
Re[13]: Mozilla: плагины и расширения
От: Everon  
Дата: 29.06.07 13:40
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Тут работа навалилась, поэтому не могу отвлечся.

Всё, всё, более не беспокою Предоставленной информации думаю с лихвой хватит чтоб всё более-менее для меня прояснилось. Огромное спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.