我想做的是修改从persist.saveDocument()下载的HTML文件。这意味着,我必须知道何时成功下载了文件。所以我需要在persist.progressListener中实现一个nsIWebProgressListener。

这是我的代码:

persist.progressListener = {
  onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress) {
  },
  onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) {
    if(aStateFlags & stop) {
      alert("file has been downloaded");
    }
  }
}


问题是,警报功能执行了无数次(甚至有时我不得不强制关闭浏览器),而不是仅仅执行一次。有谁知道如何只执行一次警报?

最佳答案

解决了。我在if语句中添加了布尔变量,因此代码如下所示:

persist.progressListener = {
  abc : true,
  onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress, aMaxTotalProgress) {
  },
  onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) {
    if((aStateFlags & stop) && abc == true) {
      this.abc = false;
      alert("file has been downloaded");
    }
  }
}


重复执行警报功能的原因是因为(aStateFlags&stop)几乎总是返回“真实的”值(非0的值),因此我添加了一个布尔变量来强制条件导致错误(真实和错误会导致错误)。

关于javascript - 使用persist.progressListener遇到麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25379406/

10-13 03:31