Mozzila有sample code用於使用nsIWebBrowserPersist saveURI
從Firefox擴展中下載文件。使用`nsIWebBrowserPersist saveURI`或Firefox擴展中的其他東西重新開始下載?
但是,它沒有說明如何監視下載是否停止並需要重新啓動。
有什麼方法可以檢查下載是否停止並重新開始下載?如果我不能用nsIWebBrowserPersist
來做,我可以使用別的東西嗎?
Mozzila有sample code用於使用nsIWebBrowserPersist saveURI
從Firefox擴展中下載文件。使用`nsIWebBrowserPersist saveURI`或Firefox擴展中的其他東西重新開始下載?
但是,它沒有說明如何監視下載是否停止並需要重新啓動。
有什麼方法可以檢查下載是否停止並重新開始下載?如果我不能用nsIWebBrowserPersist
來做,我可以使用別的東西嗎?
您需要實施和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.
}
}
};
有什麼方法可以在'onStateChange'中獲得下載進度? –
有時服務器會因爲某些未知的原因關閉連接,但代碼似乎無法捕獲此錯誤。 –
Downloads.jsm支持恢復下載。在你的Downloads object上設置tryToKeepPartialData。
是不是強制性的使用nsIWebBrowserPersist? – paa