Xpoint
   [напомнить пароль]

Вызов javascript из C++ XPCOM

Метки: [без меток]
2007-10-16 09:21:59 [обр] hades[досье]

Нашел, что нужно использовать
nsIObserverService
в классе написал так:
nsCOMPtr<nsIServiceManager> servMan;
nsCOMPtr<nsIObserverService> observerService;
nsresult rv = NS_GetServiceManager(getter_AddRefs(servMan));
nsresult rv = servMan->GetServiceByContractID("@starkravingfinkle.org/specialthing;1",
                        NS_GET_IID(nsIObserverService), getter_AddRefs(observerService));
observerService->NotifyObservers(NULL, "MyCommand", NULL);

Правильно ли это и как теперь поймать событие со стороны явы?

спустя 39 минут [обр] hades[досье]

сделал так:
var myObserver = { observe : function(subject, topic, data) {
                                     Alert('1111!!!!');
                                     if (topic == 'OnProcess') {
                                          Alert('1111!!!!');
                                     }
                                  }
                              };
   netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var observerService =
Components.classes["@mozilla.org/observer-service;1"].
 
getService(Components.interfaces.nsIObserverService);
  observerService.addObserver(myObserver, "OnProcess", false);

Итог: когда вызывается observerService->NotifyObservers(NULL, "MyCommand", NULL); ФФ виснет

спустя 45 минут [обр] hades[досье]
проблему нашел: я запускаю ф-wb. на отдельной нитке, если я с нее пытаюсь послать событие в яву - ФФ виснет, если посылаю с основной - все нормально. как побороть??
спустя 3 часа 21 минуту [обр] hades[досье]
расковырял еще:
если я из порожденного , внутри XPCOM компонента, процесса вызываю явовскую ф-цию. с помощью IObserver, то она вызывается, но никакие сообщения и окна на данной нитке отображаться не будут! как этого избежать? как показать окошко?
спустя 19 часов [обр] hades[досье]
блин, вроде ничего не менял, опять вешаемся на
observerService->NotifyObservers(NULL, "MyCommand", NULL);
складывается впечатление, что из асинхронной ф-ции(PR_CreateTread) нельзя кидать сообщения в ява скрипт :-(
Подскажите, Плз! С Ума уже схожу, млин.
Задача такая: из яваскрипта вызывается XPCOM ф-ция(с++), которая порождает новый процесс. Этот процесс что-то делает и, скажем, кидает событие в яву, что я завершился. как сделать?
Процесс создал, все нормально, Но как теперь корректно кинуть событие, чтобы ява нормально отработала??
Powered by POEM™ Engine Copyright © 2002-2005