当我的Firefox插件检查服务器进行更新时,有没有机会通过install.rdf将一些数据传递到我的服务器?
示例:
...
<em:updateURL>http://www.site.com/update.php?var=myData</em:updateURL>
...
其中“myData”保存在options.xul中或其他地方,如simple-storage。
答案 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);