3,245
社区成员
发帖
与我相关
我的任务
分享
//*
function myObserver()
{
this.register();
}
myObserver.prototype =
{
observe: function(subject, topic, data)
{
alert('Performing 3+4');
},
register: function()
{
const cid = "@yoursite.com/MyXPCOM1;1";
var obj = Components.classes[cid].createInstance();
obj = obj.getService(Components.interfaces.nsIObserverService);
obj.addObserver(this, "myTopicID", false);
},
unregister: function()
{
var observerService = Components.classes['@yoursite.com/MyXPCOM1;1'].getService(Components.interfaces.nsIObserverService);
observerService.removeObserver(this, "myTopicID");
}
}
//*/
var my_xpcom = null;
var my_observer = new myObserver();
function MyComponentTestGo()
{
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
const cid = "@yoursite.com/MyXPCOM1;1";
my_xpcom = Components.classes[cid].createInstance();
my_xpcom = my_xpcom.QueryInterface(Components.interfaces.IMyXPCOM1);
my_xpcom.observer = my_observer;
} catch (err) {
alert(err);
return;
}
var res = my_xpcom.Add(3, 4);
alert('Performing 3+4. Returned ' + res + '.');
}
NS_IMETHODIMP CMyXPCOM1::NotifyObservers(nsISupports *aSubject, const char *aTopic, const PRUnichar *someData)
{
if (m_pObserver)
m_pObserver->Observe(aSubject, aTopic, someData);
return NS_OK;
}
/* long Add (in long a, in long b); */
NS_IMETHODIMP CMyXPCOM1::Add(PRInt32 a, PRInt32 b, PRInt32 *_retval)
{
*_retval = a + b;
NotifyObservers(this, "aaa", L"bbb");
return NS_OK;
}
function myObserver()
{
this.register();
}
myObserver.prototype = {
observe: function(subject, topic, data) {
// Do your stuff here.
},
register: function() {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.addObserver(this, "myTopicID", false);
},
unregister: function() {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.removeObserver(this, "myTopicID");
}
}
observer = new myObserver();
observer.unregister();
nsresult
nsWebShellWindow::NotifyObservers( const nsString &aTopic, const nsString &someData ) {
nsresult rv = NS_OK;
// Get observer service.
nsIObserverService *svc = 0;
rv = nsServiceManager::GetService( "@mozilla.org/observer-service;1",
NS_GET_IID(nsIObserverService),
(nsISupports**)&svc );
if ( NS_SUCCEEDED( rv ) && svc ) {
// Notify observers as instructed; the subject is "this" web shell window.
nsCAutoString topic; topic.Assign(prefix);
topic.Append(";");
topic.AppendWithConversion(aTopic);
rv = svc->NotifyObservers( (nsIWebShellWindow*)this, topic.get(), someData.get() );
// Release the service.
nsServiceManager::ReleaseService( "@mozilla.org/observer-service;1", svc );
} else {
}
return rv;
}