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

Инициализация nsIPrefBranch в компоненте

2007-01-08 22:21:57 [обр] KML [досье]
Столкнулся с проблемой - если вызывать Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); в компоненте, то Branch будет содержать только дефолтные значения. Его можно каким-то образом инициализировать, чтобы были доступны userDefined значения?
спустя 3 часа 5 минут [обр] Владимир Палант [досье]
Видимо вызываете до инициализации настроек/профиля. В каком это браузере? Я с этой проблемой столкнулся только в SeaMonkey, там пришлось регистрировать observer для события profile-after-change.
спустя 43 минуты [обр] KML [досье]
Firefox 2.0.
Т.е. если метод компоненты вызывать из самой компоненты - возвращаются дефолтные значения, а если метод компоненты вызвать из оверлея, то возвращаются правильные значения.
спустя 33 минуты [обр] Владимир Палант [досье]
Вы же во время загрузки компоненты вызываете? Оверлей намного позже загружается, тогда уже все инициализировалось.
спустя 1 минуту [обр] Владимир Палант [досье]
PS: Понял, почему у меня работает, а у вас — нет. У меня инициализация не во время загрузки компоненты, а при первом запросе к объекту. Соответственно происходит это позже, профиль успевает инициализироваться.
спустя 5 минут [обр] KML [досье]
Да, вызываю во время инициализации компоненты.
спустя 12 часов [обр] Владимир Палант [досье]

Вызывайте после окончания инициализации. Для этого зарегистрируйте свою компоненту в категории app-startup и реализуйте nsIObserver. При завершении инициализации приложения ваш observer вызовется с topic app-startup — вот тогда и можете читать настройки. Раньше не стоит.

Примеру кода: http://www.xulplanet.com/tutorials/mozsdk/observerserv.php#cmnote-0, http://developer.mozilla.org/e......P_request_headers#Example_Code

спустя 1 день 5 часов [обр] KML [досье]

Сделал все как в примере:

[...]
observe: function(subject, topic, data){
  if (topic == "app-startup") {
    alert("----------------------------> app-startup");
    this.prefSvc = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
    alert(this.prefSvc.prefHasUserValue(PREF_SCHEDULER_MM));
    alert(this.prefSvc.getIntPref(PREF_SCHEDULER_MM));
    return;
  }
},
[...]

Обсервер вызывается, но this.prefSvc по прежнему содержит только дефолтные значения, prefHasUserValue возвращает false.

спустя 6 дней [обр] KML [досье]
Проблему с вычитыванием nsIPrefBranch решил путём вызова соотв. метода компоненты из оверлея :-(
Powered by POEM™ Engine Copyright © 2002-2005