firefox - Firefox 附加组件安装过程的详细信息

标签 firefox firefox-addon

我很好奇 Firefox 附加组件安装过程的内部工作原理。我注意到当用户从 addons.mozilla.org 安装附加组件时会发生以下步骤:

  1. 加载项已下载(可能在临时文件夹中)。
  2. 弹出安装确认对话框(“安装来自您信任的作者的附加组件”)。
  3. 单击安装后,附加组件将存储在/extensions/staged 文件夹中。除了附加组件之外,还有一个 JSON 文件,如下所示:addon_id.json。
  4. Firefox 提示用户重新启动浏览器。
  5. 重新启动后,/extensions/staged/文件夹中的内容将移动到/extensions/文件夹。

我想知道的是:

  • Firefox 源代码中的哪个代码部分负责第 5 步?我假设一些 c++ 或 js 代码或一些 xpcom 模块负责确定加载项正在等待安装在 staged/文件夹中,并执行必要的步骤(移动文件、注册加载项等)。 ).任何人都可以指出那个模块/代码吗?
  • 加载项在下载时(第 1 步)临时存储在哪里?

基本上,我想在第 1 步下载附加组件之后但在它成为浏览器的一部分之前(第 5 步)更改一些文件。我想在 Firefox 源代码中添加此功能。

最佳答案

您的分析大部分是正确的,只是遗漏了自举扩展。引导扩展不需要重新启动浏览器,它们将被移出 staged 目录并立即激活。

附加组件管理器是从 Firefox 4 开始的所有 JavaScript。重要文件是 amWebInstallListener.js (处理来自 Web 的附加安装的组件),AddonManager.jsm (通用插件管理 API)和 XPIProvider.jsm (XPI 打包扩展的提供者)。

  1. extWebInstallListener.onWebInstallRequested() 使用一堆 AddonInstall 实例(在 XPIInstall.jsm 中定义)调用并创建一个 Installer 实例,为每个安装调用 AddonInstall.install()。下载进入由 XPIProvider.jsm 中的 getTemporaryFile() 确定的临时文件(操作系统特定临时目录中的 tmp-foo.xpi ).
  2. Installer.checkAllDownloaded() 确定所有下载已完成并显示模态确认对话框 (URI_XPINSTALL_DIALOG)。
  3. AddonInstall.startInstall() 将附加组件移动到临时目录中。之后将立即安装引导加载项。对于其他附加组件,它会继续到第 4 步。
  4. onInstallEnded 监听器被触发 - 其中一个显示浏览器需要重新启动的消息。
  5. 浏览器重启后 XPIProvider.startup() 调用 XPIProvider.checkForChanges() 调用 XPIProvider.processPendingFileChanges()

关于firefox - Firefox 附加组件安装过程的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521541/

相关文章:

javascript - 在 Firefox 插件中验证 facebook 用户

javascript - 在 Firefox 中获取选项卡导航事件

火狐扩展开发和sqlite

css - SVG 和文字阴影,Chrome 和 Firefox 的区别

firefox - 在firefox中修改div onclick outline

javascript - 如何在 Firefox page-mod 中进行重定向?

javascript - 在不重启的情况下启动 firefox 扩展

javascript - 滚动条不出现在新窗口中

Mozilla 和 IE 中的 Javascript 计时器倒计时 - 适用于 Chrome

css - 如何在 Firefox 中设置 HTML5 验证错误的样式