【问题标题】:Intercept download link click and prevent default download dialog拦截下载链接点击并阻止默认下载对话框
【发布时间】:2015-05-09 15:30:34
【问题描述】:

我们已经为 Windows 构建了一个下载管理器桌面应用程序。现在我们要添加一个拦截下载链接并将其添加到应用程序的功能。我们认为我们应该为从 Firefox 开始的每个浏览器编写一个插件。

  1. 要拦截下载管理器的下载链接,编写插件是最佳选择吗?
  2. 我们怎样才能做到这一点?

到目前为止我们已经尝试过的事情:
- 使用Downloads.jsm 观察新的下载,然后取消它们 => 我们不希望用户与 Firefox 的下载对话框进行交互
https://stackoverflow.com/a/24466197/2550529
- 为每个选项卡添加点击事件监听器并寻找链接 => 下载链接无法区分。
https://stackoverflow.com/a/10345358/2550529
抓取链接后,它只是使用nsIProcess 传递给我们的应用程序。

一句话:我们希望它表现得像 IDM 的新下载对话框。

【问题讨论】:

标签: javascript firefox firefox-addon firefox-addon-sdk firefox-addon-restartless


【解决方案1】:

这是我们迄今为止所做的。它按预期工作。

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);

【讨论】:

    猜你喜欢
    • 2017-11-15
    • 2011-01-03
    • 2011-04-22
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多