2013-11-22 13 views
0

Mozzila有sample code用於使用nsIWebBrowserPersist saveURI從Firefox擴展中下載文件。使用`nsIWebBrowserPersist saveURI`或Firefox擴展中的其他東西重新開始下載?

但是,它沒有說明如何監視下載是否停止並需要重新啓動。

有什麼方法可以檢查下載是否停止並重新開始下載?如果我不能用nsIWebBrowserPersist來做,我可以使用別的東西嗎?

+0

是不是強制性的使用nsIWebBrowserPersist? – paa

回答

1

您需要實施和nsIWebProgressListener.progressListener

您的聽衆必須實施所有nsIWebProgressListener方法,但您可以將其中大部分方法取消。最重要的一個(這個問題)是onStateChange,在那裏你可以檢查一個錯誤的結果,這將顯示網絡錯誤,並且,作爲文檔狀態,還要檢查服務器返回的HTTP錯誤:

Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); 
var mylistener = { 
    QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIWebProgressListener]), 
    ... 
    onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) { 
    if (!(aStateFlags & Components.interfaces.nsIWebProgressListener.STATE_STOP)) { 
     // not yet done. 
    } 
    aWebProgress.progressListener = null; // reset to avoid circular references -> leaks 
    if (!Components.isSuccessCode(aStatus)) { 
     // Some network or file related error happened. 
    } 
    if (aRequest instanceof Components.interfaces.nsIHttpChannel && aRequest.responseStatus >= 400) { 
     // Some http related error happened. 
    } 
    } 
}; 
+0

有什麼方法可以在'onStateChange'中獲得下載進度? –

+0

有時服務器會因爲某些未知的原因關閉連接,但代碼似乎無法捕獲此錯誤。 –