如何为firefox addon-sdk生成update.rdf?

时间:2014-05-25 11:12:05

标签: firefox-addon-sdk

要在我的服务器上为我的插件提供自动更新,我需要创建一个update.rdf文件。

如何生成这样的文件?

文档非常强大:https://developer.mozilla.org/en-US/docs/Extension_Versioning,_Update_and_Compatibility#Update_RDF_Format

3 个答案:

答案 0 :(得分:6)

使用带有--update-link--update-url标记的cfx工具。这将生成<addon name>.update.rdf,准备上传到您的服务器。

请参阅https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/cfx#updateURL_and_updateLink

  

updateURL和updateLink

     

如果您选择自己托管XPI,则应启用主机应用程序以查找新版本的附加组件。

     

为此,请在XPI中包含一个名为updateURL的URL:主机应用程序将在此处获取有关更新的信息。在updateURL中,您以更新RDF格式托管文件:除此之外,还包括另一个名为updateLink的URL,它指向更新的XPI本身。

     

--update-link--update-url选项简化了此过程。两个选项都将URL作为参数。

     

--update-link选项与XPI一起构建更新RDF,并将提供的URL嵌入更新RDF中作为updateLink的值。

     

--update-url选项将提供的URL嵌入XPI文件中,作为updateURL的值。

     

请注意,正如add-on documentation所述,您应该确保加载项的更新过程是安全的,这通常涉及使用HTTPS作为链接。

     

因此,如果我们运行以下命令:

 cfx xpi --update-link https://example.com/addon/latest/pluginName.xpi --update-url https://example.com/addon/update_rdf/pluginName.update.rdf
     

cfx将创建两个文件:

     
      
  • https://example.com/addon/update_rdf/pluginName.update.rdf嵌入为updateURL
  • 的XPI文件   
  • 一个RDF文件,它嵌入https://example.com/addon/latest/pluginName.xpi作为updateLink的值。
  •   

答案 1 :(得分:0)

cfx has been deprecated since Firefox 38并替换为名为jpm的新工具。

根据JPM中关于supporting updates for self-hosted add-ons的MDN文章,当您在{0}中包含jpm xpiupdateURL键时,JPM会使用updateLink生成更新清单文件package.json档案:

  

为此,请在package.json中包含两个额外的键:

     
      
  • updateURL:此URL包含在jpm xpi构建的XPI文件的安装清单中。它指向您的更新清单。该   updateURL值可以是HTTPS。如果不是,那么您也需要   签署更新清单,然后使用包含公钥   package.json中的updateKey字段。有关详细信息,请参阅保护更新   此。
  •   
  • updateLink:此URL包含在更新清单文件中。它指向XPI,并且必须是HTTPS URL。
  •   

有关详情,请参阅Supporting updates for self-hosted add-ons上的MDN文章。

答案 2 :(得分:0)

执行此操作的最佳方法是使用jpm xpijpm sign--xpi参数指向新创建的.xpi文件。

jpm xpi条评论会创建update.rdf文件。

问题是update.rdf文件不正确。

  • description元素的about属性中缺少':extension'。

以某种方式解决问题。

  • 将未签名的.xpi文件重命名为.zip,并检查内容以在自动生成的install.rdf文件中包含更新网址。
  • 转到FF中的about:config并将extensions.logging.enabled更新为true。现在查看控制台并在更新时查找错误。

希望这有帮助。