使用“nsIWebBrowserPersist saveURI”或Firefox扩展中的其他内容重新启动下载

Restart download using `nsIWebBrowserPersist saveURI` or something else in a Firefox extension?

本文关键字:其他 下载 重新启动 扩展 nsIWebBrowserPersist saveURI Firefox 使用      更新时间:2023-09-26

Mozzila提供了使用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.
    }
  }
}; 

Downloads.jsm支持恢复下载。在下载对象上设置tryToKeepPartialData。