我为 Windows 编写了一个简单的下载管理器,我想为 Firefox 创建一个插件,启用后会拦截 Firefox 中的新下载并将它们发送到下载管理器。
我已经这样做了谷歌浏览器 using:
chrome.downloads.onCreated.addListener(function(details) {
// stop the download
chrome.downloads.cancel(details.id, null);
}
问题是我怎样才能使用火狐浏览器插件 SDK.
我看到有一种方法可以拦截页面加载以查看内容/标题,这可能会有所帮助,但我不知道请求是否会变成下载。
Firefox 附加 SDK:获取 http 响应标头
我也许可以寻找不是 text/html 的内容类型或检查内容处置标头,但如果我没有正确处理所有情况,这可能会导致问题。
是否无法使用 JS SDK 访问下载管理器,或者无法通过某种方式了解下载何时开始/正在启动和停止?
The http-on-examine-response
观察者认为,所讨论的链接问题是错误的方法。它涉及所有请求而不仅仅是下载。
相反,使用Downloads.jsm观察新的下载,然后取消它们,等等。
To load Downloads.jsm
在SDK中使用:
const {Cu} = require("chrome");
Cu.import("resource://gre/modules/Downloads.jsm");
Cu.import("resource://gre/modules/Task.jsm");
然后您可以添加您的侦听器。
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);
}
});
链接的 MDN 文档有更多信息和示例。
由于您的附加组件是无需重新启动的 SDK 附加组件,因此您需要使用以下命令再次删除侦听器.removeView
卸载时,否则会出现内存泄漏。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)