我们已经为Windows构建了下载管理器桌面应用程序。现在,我们要添加一个截获下载链接并将其添加到应用程序的功能。我们认为我们应该从Firefox开始为每个浏览器编写一个插件。
- 要拦截下载经理的下载链接,写作添加剂是最佳选择吗?
- 我们该怎么做?
到目前为止我们尝试过的事情:
- 使用downloads.jsm观察新下载,然后取消它们=>我们不希望用户与Firefox的下载对话框进行交互
https://stackoverflow.com/a/24466197/2550529
- 将单击事件侦听器添加到每个选项卡上并寻找链接=>下载链接是无法区分的。
https://stackoverflow.com/a/10345358/2550529
抓住链接后,它只是使用nsiprocess传递给我们的应用程序。
在一个句子中:我们希望它的行为就像IDM的新下载对话框。
这是我们迄今为止所做的。它可以按预期工作。
const {components, Cc, Ci} = require("chrome");
httpRequestObserver =
{
observe : function(aSubject, aTopic, aData) {
if (aTopic == "http-on-modify-request") {
let url;
aSubject.QueryInterface(Ci.nsIHttpChannel);
url = aSubject.URI.spec;
if(dlExtensions == null)
return;
var match = false;
for(x in dlExtensions)
if(url.endsWith(dlExtensions[x]))
{
match = true;
break;
}
if(match == true) {
aSubject.cancel(components.results.NS_BINDING_ABORTED);
//Pass url to exe file
}
}
}
};
var observerService = components.classes["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
observerService.addObserver(httpRequestObserver, "http-on-modify-request", false);