两个相关问题:
是否有API可以生成Firefox中所有已安装扩展程序的列表?
如果是这样,我如何唯一地识别扩展名?我需要的是拥有一个ID,该ID通过不同版本的扩展名持续存在,理想情况下通过重命名(因此名称可能不是最佳选择)。它是GUID吗?
谢谢!
答案 0 :(得分:2)
注意:此答案已过时。 nsIExtensionManager已替换为AddonManager
,并且不推荐使用FUEL。
您可以从nsIExtensionManager获取项目列表。是的,有一个唯一的附加ID(nsIUpdateItem::id
),as specified in the install manifest。
再想一想,这就是FUEL真正有用的地方。在错误控制台中尝试此操作:
Application.extensions.all.forEach(function(item) { alert(item.id) })
答案 1 :(得分:1)
要获取扩展程序列表,请查看components文件夹中的nsExtensionManager.js
,
有一个名为validExtensions
的变量用于在firefox配置文件目录中生成extensions.ini
对于唯一ID,我猜它依赖于扩展本身,因为一些扩展名如noscript,adblockplus使用GUID,以及一些扩展名,如firebug,foxmarks使用电子邮件地址样式。
答案 2 :(得分:0)
可以从Firefox外部(至少在60.0版中)从配置文件目录中的extensions.json
文件中获取已安装的扩展名列表。也可以找到extensions.sqlite
和addons.sqlite
sqlite数据库,但它们不包括所有扩展名。
也有addons.json
,但其中不包含“有效”标志(即扩展名是有效,已启用还是已禁用)。
要获取具有类型和活动标记的已安装扩展的CSV列表,可以使用以下 XPath3 查询:
( json-doc("extensions.json") ? addons => array:flatten() )
! ( ?type, ",", ?defaultLocale?name, ",", ?active, "
" )
=> string-join()
注意:对于正确的CSV,还需要用引号将包含逗号或引号的值引起来,并转义引号。
使用xq
命令从外壳程序中
xq ' ( json-doc("extensions.json") ? addons => array:flatten() ) ! ( ?type, ",", ?defaultLocale?name, ",", ?active, "
" ) => string-join()' | sort
输出示例:
extension,Mozilla Archive Format,false
extension,Restart,false
theme,Default,false
webextension,Add HTTPS,true
webextension,Greasemonkey,true
xq
脚本
#!/bin/bash
declare_ns_map='declare namespace map = "http://www.w3.org/2005/xpath-functions/map";'
declare_ns_array='declare namespace array = "http://www.w3.org/2005/xpath-functions/array";'
q="$1"; shift
saxonhe-xquery -qs:"$declare_ns_map $declare_ns_array $q" "$@" \!omit-xml-declaration=yes \!indent=yes
一个比XPath简单的查询,使用 jq JSON处理器可以获得相同的结果:
jq -j '.addons [] | ( .type, ",", .defaultLocale.name, ",", .active, "\n" )' extensions.json | sort