Javascript 理解Firefox扩展结构

Javascript 理解Firefox扩展结构,javascript,firefox-addon,Javascript,Firefox Addon,我正在尝试编写一个Firefox扩展,它拦截某个HTTP请求并返回静态内容,而不将请求发送到实际服务器(类似于AdBlock) 我查阅了教程,得到了一个基本的文件布局。我还发现我需要使用和添加一个观察者来完成我想要的事情,我有这方面的示例代码 问题是,我应该把代码放在哪里?我的扩展实际上是什么时候加载和执行的?它是在后台持续异步运行还是按页面视图加载 文档中似乎对此不是很清楚。这个扩展不需要GUI,所以我不需要布局XUL文件(或者我需要?)。我试着编写一些XPCOM组件(我认为我做得不对),在c

我正在尝试编写一个Firefox扩展,它拦截某个HTTP请求并返回静态内容,而不将请求发送到实际服务器(类似于AdBlock)

我查阅了教程,得到了一个基本的文件布局。我还发现我需要使用和添加一个观察者来完成我想要的事情,我有这方面的示例代码

问题是,我应该把代码放在哪里?我的扩展实际上是什么时候加载和执行的?它是在后台持续异步运行还是按页面视图加载

文档中似乎对此不是很清楚。这个扩展不需要GUI,所以我不需要布局XUL文件(或者我需要?)。我试着编写一些XPCOM组件(我认为我做得不对),在
chrome.manifest
中注册了它,但它似乎没有运行


有人能确切地解释Firefox扩展是如何工作的吗?我应该把实际的JavaScript代码放在哪里来监视请求?还是我完全明白了什么是扩展错误?外接程序、扩展和插件之间有区别吗?

关于外接程序、扩展和插件之间的区别,您应该看看。但总的来说,你的想法似乎是正确的

问题是,目前有三种不同类型的扩展:

  • 经典扩展(不是无重启的):这些扩展通常会从这个覆盖中创建并运行代码。由于每个窗口都有一个覆盖,因此将有与浏览器窗口一样多的代码实例。但是,经典扩展也可以注册XPCOM组件()。此组件将在首次使用时加载,并在整个浏览会话中保留。您可能希望在浏览器启动时加载组件,为此,您应该在更改后的
    配置文件中注册它
    类别并实现
    nsIObserver
  • 无重启扩展,也称为:这些扩展无法注册覆盖,这使得使用浏览器UI变得更加复杂。相反,它们有一个
    bootstrap.js
    脚本,当扩展被激活时将加载该脚本,该上下文将一直保留在后台,直到浏览器关闭或扩展被禁用。您也可以在无重启扩展中使用XPCOM组件,但必须手动注册它们(通过和)。如果扩展关闭,您还必须注意注销组件。如果您只需要添加一个观察器,那么这是不必要的,它将接受实现
    nsIObserver
    的任何对象,而不仅仅是注册为XPCOM组件的对象。最大的缺点是:大多数MDN示例都是关于经典扩展的,没有解释如何在无重启扩展中进行操作
  • 基于的扩展:这些扩展基于生成无重启扩展的框架。附加SDK有它自己的功能,这与您通常在Firefox扩展中所做的非常不同,但它很简单,并且它主要负责关闭扩展,这样您就不必手动操作。这里的扩展由许多模块组成,其中
    main.js
    自动加载,并且能够根据需要加载其他模块。加载后,只要扩展处于活动状态,每个模块都会一直保留。它们运行沙盒,但您仍然可以直接访问XPCOM。但是,您可能会使用内部

  • 谢谢,引导扩展似乎就是我想要的。@tangrs:Side-note:Adblock Plus不使用
    nsetraceablechannel
    ,而是使用。有关最小(和引导)内容策略实施的信息,请参阅。