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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.