extension Firefox réponse observant
-
26-10-2019 - |
Question
Je suis en train en utilisant le code
// This is an active module of the goelvivek (8) Add-on
exports.main = function() {
var httpRequestObserver =
{
observe: function(subject, topic, data)
{
if (topic == "http-on-examine-response") {
if(console)
console.log(data);
}
}
};
var {Cc, Ci, Cr} = require("chrome");
var observer = require("observer-service");
observerService = Components.classes["@mozilla.org/observer-service;1"].
getService(Components.interfaces.nsIObserverService);
observerService.addObserver(httpRequestObserver, "http-on-examine-response", false);
};
mais la ligne console.log(data);
n'imprime quelque chose dans le journal de la console. pourquoi?
La solution
En plus de la question a fait remarquer Nickolay, un besoin d'observateurs pour mettre en œuvre une fonction de QueryInterface()
(généralement au moyen de XPCOMUtils.generateQI () ). Voici comment on pourrait le faire avec l'Add-on SDK:
var {Cc, Ci, Cr, Cu} = require("chrome");
var {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm");
var httpRequestObserver =
{
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
...
};
Cependant, puisque vous avez besoin déjà paquet observer-service
, il serait plus facile de l'utiliser:
var observer = require("observer-service");
observer.add("http-on-examine-response", onHttpRequest);
function onHttpRequest(subject, data)
{
...
}
L'inconvénient de cette approche est que observer-service
est un paquet interne et son API pourrait changer à l'avenir Add-on SDK versions.
Autres conseils
Est-ce l'extrait réel? Vous devriez voir une erreur au sujet Components
étant non défini dans la console d'erreur. Soit obtenir de require('chrome')
ou utiliser l'objet de require("observer-service")
.