firefox addon install.rdf在更新时将数据传递给服务器

时间:2014-05-04 11:46:03

标签: javascript firefox firefox-addon xul firefox-addon-sdk

当我的Firefox插件检查服务器进行更新时,有没有机会通过install.rdf将一些数据传递到我的服务器?

示例:

...
<em:updateURL>http://www.site.com/update.php?var=myData</em:updateURL>
...

其中“myData”保存在options.xul中或其他地方,如simple-storage。

2 个答案:

答案 0 :(得分:1)

是的,但这是非常讨厌的。 URL中的AddonManager will replace一组预定义和动态属性

  • 注册实施nsIPropertyBag2的新组件(或使用现有实施,例如["@mozilla.org/hash-property-bag;1"])。
  • nsICategoryManager类别下的"extension-update-params"注册您的组件。
  • 由于您提到simple-storage:重新启动加载项还必须在卸载时注销其内容。

a unit test证明这些东西是如何运作的。你当然需要稍微调整一下(如果单独用于require("chrome")

答案 1 :(得分:0)

我找到了一个简单的解决方案&#34;但我不知道这是不是很好的做法...

var origLink = "http://www.site.net/update.php?var=myData";
var newsLink = "http://www.site.net/update.php?var=" + simplePref.prefs.myData;

const {Cc,Ci,Cu} = require("chrome");

var observer = {
    QueryInterface: function(iid) {
        if (iid.equals(Ci.nsIObserver) || iid.equals(Ci.nsISupports)) return this;
    },
    observe: function(subject, topic, data){
        if (topic == "http-on-modify-request"){
            var channel = subject.QueryInterface(Ci.nsIChannel);
            if (channel.originalURI.spec == origLink) {
                channel.originalURI.spec  = newsLink;
            }
         }
    }
};
var ObsService = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
ObsService.addObserver(observer, "http-on-modify-request", false);