2015-01-28 3 views
1

Я пытаюсь написать аддон для Firefox, который отображает текущий процент загружаемого файла на веб-сайт (подобно тому, как это делает хром). Проблема, с которой я сталкиваюсь, заключается в том, что я никогда не работал с Addons для Firefox, поэтому я немного смущен.Получение информации о загруженных файлах

Я посмотрел на источник this Addon, который был выпущен в 2011 году, и этот разработчик ссылается на следующие файлы:

Components.utils.import("resource://gre/modules/DownloadUtils.jsm"); 
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); 
Components.utils.import("resource://gre/modules/PluralForm.jsm"); 

Еще один интересный кусок кода, который я нашел, когда происходит через источник был:

Components.classes["@mozilla.org/network/http-activity-distributor;1"], 

Я провел небольшое исследование этих модулей/классов, но мне было интересно, если в течение последних 4 лет произошли изменения в технологии, и Firefox немного упростил загрузку файлов Информация.

Я знаю из своего опыта в веб-разработке, что вы можете использовать XMLHttpRequest() и addEventListener("progress", <function>, false);, но возможно ли это с помощью Firefox Addons? И будет ли он работать с любым файлом, загруженным на сайт?

Я довольно потерян, как вы можете видеть, любая помощь будет принята с благодарностью. Огромное спасибо!!

+1

Это интересно я поддерживаю видеть в браузере. Я не уверен, как это сделать, но реквизит для вас, человек, чтобы изучить его. Держать нас в курсе. Это абсолютно возможно из области аддона: https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIWebProgressListener?redirectlocale=en-US&redirectslug=nsIWebProgressListener#onProgressChange%28%29/ nsIWebProgressListener? redirectlocale = en-US & redirectslug = nsIWebProgressListener # onStatusChange% 28% 29 – Noitidart

ответ

0

На самом деле это выглядит как весь код, нужно правильно в этом аддоне, я принял это от этого аддона вы публикуемым здесь: https://addons.mozilla.org/en-US/firefox/files/browse/125019/file/components/uploads.js#top

init: function() { 
     //dump(">>>>>>>>>>>>>>>>>>>>>> INITIALIZED\n"); 
     // add observer 
     var hao = Ci.nsIHttpActivityObserver; 
     var _self = this; 
     this.observer = { 
      observeActivity: function(aHttpChannel, aActivityType, 
       aActivitySubtype, aTimestamp, aExtraSizeData, aExtraStringData) { 
       if ((aActivityType == hao.ACTIVITY_TYPE_SOCKET_TRANSPORT) && 
        (aActivitySubtype == 0x804b0005)) { // STATUS_SENDING_TO 
        //dump("UPDATE STATUS: ["+aTimestamp+"] *" + aHttpChannel + "*\n"); 
        _self.updateStatus(aHttpChannel, aTimestamp, aExtraSizeData); 
       } 
       if (aActivityType == hao.ACTIVITY_TYPE_HTTP_TRANSACTION) { 
        switch (aActivitySubtype) { 
         //case hao.ACTIVITY_SUBTYPE_RESPONSE_COMPLETE: 
         case hao.ACTIVITY_SUBTYPE_TRANSACTION_CLOSE: 
          //dump("REMOVE: *" + aHttpChannel + "*\n"); 
          _self.removeUpload(aHttpChannel); 
          break; 
         case hao.ACTIVITY_SUBTYPE_REQUEST_HEADER: 
          //dump("CREATE: *" + aHttpChannel + "*\n"); 
          _self.createUpload(aHttpChannel); 
          break; 
        } 
       } 
      } 
     }; 
     Cc["@mozilla.org/network/http-activity-distributor;1"] 
      .getService(Ci.nsIHttpActivityDistributor) 
      .addObserver(this.observer); 
    }, 
    shutdown: function() { 
     Cc["@mozilla.org/network/http-activity-distributor;1"] 
      .getService(Ci.nsIHttpActivityDistributor) 
      .removeObserver(this.observer); 
    }, 
+0

Спасибо, я воспользуюсь этим, чтобы помочь найти решение для моего варианта использования! :) –

Смежные вопросы