繁体   English   中英

Firefox扩展开发人员:如何仅设置一次观察者

[英]Firefox extension dev: How to set an observer only once

我创建了一个很小的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插件时,返回以下信息:

您将为每个打开的窗口创建一个HTTP观察器,而应该只有一个实例。

现在如何创建一个观察者实例?

您应该使用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){
        //...
    } 
}

顺便说一句,在jsm中,您不能使用window对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM