我正在尝试为Firefox编写一个插件,显示正在上传到网站的文件的当前百分比(类似于chrome的工作方式)。我遇到的问题是我从未使用过Addons for Firefox,所以我有点困惑。
我查看了2011年发布的this Addon的来源,该开发人员引用了以下文件:
Components.utils.import("resource://gre/modules/DownloadUtils.jsm");
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
Components.utils.import("resource://gre/modules/PluralForm.jsm");
我在浏览源代码时发现的另一段有趣的代码是:
Components.classes["@mozilla.org/network/http-activity-distributor;1"],
我已经对这些模块/类进行了一些研究,但我想知道在过去的4年里技术是否发生了变化,Firefox使得获取文件上传信息变得容易一些。
根据我在Web开发方面的经验,您可以使用XMLHttpRequest()
和addEventListener("progress", <function>, false);
但是Firefox插件可以实现吗?它会与上传到网站的任何文件一起使用吗?
我很丢失,你可以看到,任何帮助将不胜感激。非常感谢你!!
答案 0 :(得分:0)
实际上看起来你需要的所有代码都在那个插件中,我从你在这里发布的插件中取出了这个:https://addons.mozilla.org/en-US/firefox/files/browse/125019/file/components/uploads.js#top
init: function() {
//dump(">>>>>>>>>>>>>>>>>>>>>> INITIALIZED\n");
// add observer
var hao = Ci.nsIHttpActivityObserver;
var _self = this;
this.observer = {
observeActivity: function(aHttpChannel, aActivityType,
aActivitySubtype, aTimestamp, aExtraSizeData, aExtraStringData) {
if ((aActivityType == hao.ACTIVITY_TYPE_SOCKET_TRANSPORT) &&
(aActivitySubtype == 0x804b0005)) { // STATUS_SENDING_TO
//dump("UPDATE STATUS: ["+aTimestamp+"] *" + aHttpChannel + "*\n");
_self.updateStatus(aHttpChannel, aTimestamp, aExtraSizeData);
}
if (aActivityType == hao.ACTIVITY_TYPE_HTTP_TRANSACTION) {
switch (aActivitySubtype) {
//case hao.ACTIVITY_SUBTYPE_RESPONSE_COMPLETE:
case hao.ACTIVITY_SUBTYPE_TRANSACTION_CLOSE:
//dump("REMOVE: *" + aHttpChannel + "*\n");
_self.removeUpload(aHttpChannel);
break;
case hao.ACTIVITY_SUBTYPE_REQUEST_HEADER:
//dump("CREATE: *" + aHttpChannel + "*\n");
_self.createUpload(aHttpChannel);
break;
}
}
}
};
Cc["@mozilla.org/network/http-activity-distributor;1"]
.getService(Ci.nsIHttpActivityDistributor)
.addObserver(this.observer);
},
shutdown: function() {
Cc["@mozilla.org/network/http-activity-distributor;1"]
.getService(Ci.nsIHttpActivityDistributor)
.removeObserver(this.observer);
},