2

我已经使用 Add-On SDK 构建了一个 Firefox 扩展,并强制它通过注册表项安装。(通过HKLM\Software\Mozzilla\Firefox\Extensions\extensionid

当我转到附加组件管理器并选择“检查更新”时,它不会向<updateUrl>. 有针对https://versioncheck.addons.mozilla.org/的请求……但不是针对我在<updateUrl>.

这也可以通过使用 Firefox Add-On SDK 构建的空 hello world 扩展来重现:

cfx init
cfx xpi --update-url https://fooo.com/update.rdf

然后使用 WinRAR 解压 XPIC:\test-extension并在以下注册表项下添加一个字符串值:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Firefox\Extensions\ 

带有一个名为jid1-W2S1bxv6O1LoAA@jetpack(生成的扩展 ID)的字符串值,指向带有解压 XPI 的文件夹:

注册表值名称: jid1-W2S1bxv6O1LoAA@jetpack 值: C:\test-extension

然后启动 Firefox,扩展将安装到 Firefox 中。从附加组件管理器中,选择检查更新。

中指定的 URL<updateURL>永远C:\test-extension\install.rdf不会被访问。

为了完整起见,这是install.rdf文件(直接来自 cfx 生成的输出的未触及默认值):

<?xml version="1.0" encoding="utf-8"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
  <Description about="urn:mozilla:install-manifest">
    <em:id>jid1-W2S1bxv6O1LoAA@jetpack</em:id>
    <em:version>0.1</em:version>
    <em:type>2</em:type>
    <em:bootstrap>true</em:bootstrap>
    <em:unpack>false</em:unpack>

    <!-- Firefox -->
    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
        <em:minVersion>19.0</em:minVersion>
<!-- I tried also with maxVersion 25.* -->
        <em:maxVersion>20.*</em:maxVersion>
      </Description>
    </em:targetApplication>

    <!-- Front End MetaData -->
    <em:name>TEST</em:name>
    <em:description>a basic add-on</em:description>
    <em:creator></em:creator>
    <em:updateURL>https://mydomain.com/updates.rdf</em:updateURL>
  </Description>
</RDF>

当我通过拖放手动安装 .xpi 文件到 Firefox 中时,当我Check for Updates在附加组件管理器中调用时,会按预期检查 updateURL。

我错过了什么吗?<updateURL>通过注册表安装的扩展是否支持更新?

4

1 回答 1

1

通过 Windows 注册表进行的安装被锁定,因此附加组件不可升级。与配置文件中的附加组件不同,此类位置被视为外部位置并且不受应用程序控制,用户很可能无论如何都无法升级附加组件(只有系统管理员可以)。

通过系统位置的注册表安装的附加组件必须提供自己的升级机制。

于 2013-12-05T10:36:19.920 回答