nsIObserver
Материал из MDC.
Содержание |
[править] Краткое описание
nsIObserver обеспечивает объекту возможность принимать сообщения. Такие сообщения обычно (но не всегда) рассылаются с помощью интерфейса nsIObserverService.
nsIObserver is defined in xpcom/ds/nsIObserver.idl, and
has been frozen since Mozilla 0.9.6. It is scriptable.
[править] Код интерфейса
[scriptable, uuid(DB242E01-E4D9-11d2-9DDE-000064657374)]
interface nsIObserver : nsISupports
{
void observe( in nsISupports aSubject,
in string aTopic,
in wstring aData );
};
[править] Методы
[править] observe
void observe( in nsISupports aSubject,
in string aTopic,
in wstring aData );
Метод observe вызывается тогда, когда приходит сообщение на ту тему, для прослушивания которой объект был зарегистрирован.
Обычно, в aSubject содержится объект, в результате изменения или другого действия над которым было создано полученное сообщение. Параметр aTopic определяет тип действия или изменения. А необязательный параметр aData и другие данные дополняют информацию о совершенном действии или изменении.
Конкретные значения, а так же смысл переданных параметров бывают разными, в зависимости от того где был зарегистрирован приемник и какая тема прослушивается.
Конкретный пример использования интерфейса nsIObserver может быть настроен на получение множества типов сообщений, и может вести себя по-разному в зависимости от переданных параметров. Чаще всего, основной параметр для выбора дальнейших действий — это aTopic, и в коде надо учитывать, что метод может быть вызван с неизвестным на момент написания значением параметра aTopic.
Так как система, обслуживающая прием сообщений, может вызывать конкретный приемник в разных контекстах, настоятельно рекомендуется не добавлять и не удалять приеники непосредственно в момент вызова метода observe.
[править] Связанные интерфейсы
[править] Пример кода
Следующий пример демонстрирует применение интерфейса nsIObserver, который позволяет зарегистрировать объект в системе пользовательских настроек для получения сообщений об изменении каких-либо значений (полный код примера и дополнительную информацию о системе настроек см. на странице Использование настроек из MozillaZine).
var prefObserver = {
// nsIObserver
observe: function (aSubject, aTopic, aData) {
if (aTopic == "nsPref:changed") { // observe preference changes
// aData contains the name of the changed preference
dump(aData+" changed!");
}
},
QueryInterface: function(aIID) {
if(!aIID.equals(CI.nsISupports) && !aIID.equals(CI.nsIObserver))
throw CR.NS_ERROR_NO_INTERFACE;
return this;
}
};