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

两个相关问题:

  • 是否有API来生成Firefox中所有已安装扩展的列表

  • 如果是这样,我将如何唯一地标识扩展?我需要的是一个ID,该ID可以通过不同版本的扩展持久存在,理想情况下可以通过重命名持久存在(因此名称可能不是最佳选项)。是GUID吗


  • 谢谢

    要获取扩展列表,请查看组件文件夹中的
    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
    

    这个答案也过时了。