gpt4 book ai didi

javascript - 火狐扩展开发 : How to set an observer only once

转载 作者:行者123 更新时间:2023-11-28 01:42:44 25 4
gpt4 key购买 nike

我仅用一小段代码创建了一个小型 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 时,我得到以下结果:

You're creating an HTTP observer for every opened window, while there should be just a single instance.

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

最佳答案

您应该使用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 对象。

关于javascript - 火狐扩展开发 : How to set an observer only once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20685647/

25 4 0
文章推荐: Javascript:为 FileReader readAsBinaryString 准备图像对象
文章推荐: javascript - 如何防止浏览器阻止我创建的弹出窗口?
文章推荐: html - XPath 选择该父 div 内的