我用一小段代码创建了一个小小的Firefox扩展。像这样:
var load = function() {
Components.classes['@mozilla.org/observer-service;1'].getService(Components.interfaces.nsIObserverService).addObserver({
observe: function(subject, topic, data) {
var channel = subject.QueryInterface(Components.interfaces.nsIHttpChannel);
if(/google\.com/.test(channel.originalURI.host)) {
// magic here
}
}
}, 'http-on-modify-request', false);
};
window.addEventListener('load', load, false);
当我将此插件提交给Firefox Addons时,我得到以下内容作为返回:
你正在为每个打开的窗口创建一个HTTP观察者 应该只是一个单一的实例。
现在如何创建单个观察者实例?
答案 0 :(得分:1)
您应该使用JS代码模块。在您的叠加脚本中放置:
Cu.import("resource://yourPluginName/yourModule.jsm");
并在你的yourModule.jsm
中,只有你的观察者才举例:
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
var observerService = Cc["@mozilla.org/observer-service;1"]
.getService(Ci.nsIObserverService);
observerService.addObserver(testObs, "http-on-examine-response", false);
var testObs = {
observe: function(aSubject, aTopic, aData){
//...
}
}
在BT中BTW,你不能使用窗口对象。