Javascript 无法使用persist.progressListener

Javascript 无法使用persist.progressListener,javascript,firefox,callback,firefox-addon,mozilla,Javascript,Firefox,Callback,Firefox Addon,Mozilla,我试图做的是修改从persist.saveDocument()下载的HTML文件。这意味着,我必须知道文件何时被成功下载。因此,我需要在persist.progressListener中实现nsIWebProgressListener 这是我的密码: persist.progressListener = { onProgressChange: function(aWebProgress, aRequest, aCurSelfProgress, aMaxSelfProgress, aCurTo

我试图做的是修改从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)几乎总是返回“truthy”值(值不是0),因此我添加了一个布尔变量来强制条件导致false(truthy和false将导致false)。

您的
stop
var的值是多少?对于测试,而不是
警报
使用
控制台.log
@Noitidart Components.interfaces.nsIWebProgressListener.STATE\u STOP;好的,谢谢你的分享。我在这里学到了一些关于位运算的知识。
aStatFlags&stop
的最终值是多少?什么是透水值?