Полезная информация

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№106-03-2006 17:44:32

baraboshinkg
Участник
 
Группа: Members
Зарегистрирован: 06-03-2006
Сообщений: 2

Вызов функций JavaScript'а из расширения написанного на C++(XPCOM)?

Собственно есть раширение ввиде тулбара, у него есть JS обрабатывающий нажатия кнопок и т.п. Он в свою очередь создаёт и вызывает XPCOM объект написаный на C++. Здесь всё шеколадно, а вот как сделать наоборот? Что бы из этого объекта вызвать функции того JS? Я подозреваю что это не сложно, но что то не могу найти ни как....

Отсутствует

 

№207-03-2006 10:56:58

cesspit
Участник
 
Группа: Members
Откуда: СПб
Зарегистрирован: 08-02-2006
Сообщений: 80

Re: Вызов функций JavaScript'а из расширения написанного на C++(XPCOM)?

1) оперировать придётся интерфейсами а не функциями. Интерфейсы js нужно передать в C++ код, чтобы оттуда с ними работать.
2) описываете на XPIDL интерфейс callback-а:

[scriptable, uuid(...)]
interface ICallBack : nsISupports
{
  void SaySomething(in AString message);
};

,  и метод вашего компонента,  работающий с этим интерфейсом

[scriptable, uuid(...)]
interface IYourComponent : nsISupports
{
  void workWithCallBack(in ICallBack cb);
};

3) на javascript создаёте объект реализующий интерфейс callback-а

var listener = {
  SaySomething : function(message) {
      alert(message)
  }
};

4) пишете C++ код по работе с интерфейсом:

NS_IMETHODIMP СYourComponent::workWithCallBack(ICallBack* cb)
{
   cb->SaySomething(NS_LITERAL_STRING("C++ code is speaking"));
}

что-то типа того, за работоспособность этого кода не ручаюсь, на ходу придумывал, но идея такая.
Ещё можно почитать - http://groups.google.ru/group/netscape. … rt=1&num=3

Отсутствует

 

№307-03-2006 15:02:24

baraboshinkg
Участник
 
Группа: Members
Зарегистрирован: 06-03-2006
Сообщений: 2

Re: Вызов функций JavaScript'а из расширения написанного на C++(XPCOM)?

:) Спасибо. Всё работает. Я уже почти догадался как это сделать, когда ответ прочёл. А Вы потвердили мою догадку.:)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]