0

我們已經爲windows構建了一個下載管理器桌面應用程序。現在我們想添加一個攔截下載鏈接並將其添加到應用程序的功能。我們認爲我們應該爲每個從Firefox開始的瀏覽器編寫一個插件。截取下載鏈接點擊並阻止默認下載對話框

  1. 要攔截下載鏈接的下載管理器,是寫插件的最佳選擇?
  2. 我們該怎麼做?

的事情,我們試過到目前爲止:
- 使用Downloads.jsm觀察新的下載,然後將其取消=>我們不希望用戶使用Firefox的下載對話框
https://stackoverflow.com/a/24466197/2550529
互動 - 添加單擊每個選項卡的事件偵聽器並查找鏈接=>下載鏈接無法區分。
https://stackoverflow.com/a/10345358/2550529
抓住鏈接後,它只是通過nsIProcess傳遞給我們的應用程序。

用一句話:我們希望它像IDM的新下載對話框一樣。

+0

洪流龍捲風的插件作者這樣做,在這裏幫助用戶:http://forums.mozillazine.org/viewtopic.php?p=13929335#p13929335他的工作方法有點哈克,我認爲雖然現在即時閱讀它。 – Noitidart

回答

0

這是我們迄今爲止所做的。它按預期工作。

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