Javascript Firefox-如何列出已安装的扩展并在列表中标识它们?
两个相关问题:Javascript Firefox-如何列出已安装的扩展并在列表中标识它们?,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,两个相关问题: 是否有API来生成Firefox中所有已安装扩展的列表 如果是这样,我将如何唯一地标识扩展?我需要的是一个ID,该ID可以通过不同版本的扩展持久存在,理想情况下可以通过重命名持久存在(因此名称可能不是最佳选项)。是GUID吗 谢谢 要获取扩展列表,请查看组件文件夹中的nsExtensionManager.js, 有一个名为validExtensions的变量,用于在firefox配置文件目录中生成extensions.ini 对于唯一ID,我想它取决于扩展本身,因为有些扩展,如n
谢谢 要获取扩展列表,请查看组件文件夹中的
nsExtensionManager.js
,
有一个名为validExtensions
的变量,用于在firefox配置文件目录中生成extensions.ini
对于唯一ID,我想它取决于扩展本身,因为有些扩展,如noscript、adblockplus使用GUID,有些扩展,如firebug、foxmarks使用电子邮件地址样式。注意:这个答案已经过时。nsIExtensionManager被替换为,FUEL已弃用 您可以从nsIExtensionManager获取项目列表。是的,扩展有一个唯一的ID(
nsupdateItem::ID
)
再想一想,这就是燃料真正有用的地方。在错误控制台中尝试以下操作:
Application.extensions.all.forEach(function(item) { alert(item.id) })
在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稍微简单的查询,使用JSON处理器获得相同的结果:
jq -j '.addons [] | ( .type, ",", .defaultLocale.name, ",", .active, "\n" )' extensions.json | sort
这个答案也过时了。