ant*_*tfx 4 javascript firefox-addon firefox-addon-sdk
我已经为Windows编写了一个简单的下载管理器,我想为Firefox创建一个插件,当启用它时会拦截Firefox中的新下载并将它们发送到下载管理器.
我已经使用以下方法为Google Chrome做了这个:
chrome.downloads.onCreated.addListener(function(details) {
// stop the download
chrome.downloads.cancel(details.id, null);
}
Run Code Online (Sandbox Code Playgroud)
问题是如何使用Firefox附加SDK实现类似的功能.
我看到有一种拦截页面加载的方法来查看可能有用的内容/标题,但后来我不知道请求是否会变成下载.
我也许可以查找不是text/html的内容类型或检查内容处理标题,但如果我没有正确处理所有情况,可能会导致问题.
有没有办法使用JS SDK访问下载管理器或某种方式知道下载何时开始/正在启动并停止下载?
http-on-examine-response链接问题讨论的观察者是错误的方法.它涉及所有请求,而不仅仅是下载.
而是使用Downloads.jsm观察新的下载,然后取消它们,等等.
要加载Downloads.jsmSDK,请使用:
const {Cu} = require("chrome");
Cu.import("resource://gre/modules/Downloads.jsm");
Cu.import("resource://gre/modules/Task.jsm");
Run Code Online (Sandbox Code Playgroud)
然后你可以添加你的听众.
let view = {
onDownloadAdded: function(download) {
console.log("Added", download);
},
onDownloadChanged: function(download) {
console.log("Changed", download);
},
onDownloadRemoved: function(download) {
console.log("Removed", download);
}
};
Task.spawn(function() {
try {
let list = yield Downloads.getList(Downloads.ALL);
yield list.addView(view);
} catch (ex) {
console.error(ex);
}
});
Run Code Online (Sandbox Code Playgroud)
链接的MDN文档包含更多信息和示例.
由于您的加载项是一个无重启的SDK附加组件,因此您需要.removeView在卸载时再次删除侦听器,否则会出现内存泄漏.