Javascript 使用addProgressListener和onStatusChange获取页面的DNS查找时间

Javascript 使用addProgressListener和onStatusChange获取页面的DNS查找时间,javascript,firefox-addon,xpcom,Javascript,Firefox Addon,Xpcom,我正在尝试向firefox扩展添加功能,以计算一个网页执行DNS查找所需的时间。看看Firebug,我认为可以通过向浏览器对象添加一个web进度侦听器并侦听事件来实现 首先,我在加载页面时注册一个事件侦听器: window.addEventListener("load", function(e) { myObj.onLoad(e); }, false); 在myObj.onLoad()中,我注册了我的web进度侦听器,如下所示: gBrowser.addProgressListener(th

我正在尝试向firefox扩展添加功能,以计算一个网页执行DNS查找所需的时间。看看Firebug,我认为可以通过向浏览器对象添加一个web进度侦听器并侦听事件来实现

首先,我在加载页面时注册一个事件侦听器:

window.addEventListener("load", function(e) { myObj.onLoad(e); }, false);
在myObj.onLoad()中,我注册了我的web进度侦听器,如下所示:

 gBrowser.addProgressListener(this, Components.interfaces.nsIWebProgress.NOTIFY_ALL);
最后,我在myObj内部实现了“onStatusChange”,以及QueryInterface和其他工具:

onStatusChange: function(aWebProgress, aRequest, aStatus, aMessage) {
    this.logInfo("onStatusChange: " + aMessage + ". Time = " + (new Date().getTime()));
}
但是,调用onStatusChange时,即使消息显示正确的事件,aStatus始终为0。我花了好几个小时想弄明白。你知道为什么吗


另外,状态为“Ci.nsISocketTransport.status_RESOLVING”的onStatusChange似乎只在某些组件上调用,而没有在其他组件上调用,即使它们可能有不同的域名需要翻译,并且DNS尚未缓存。需要帮助

如果将进度侦听器附加到选项卡式浏览器,则只能获得进度事件的过滤视图。您可能会发现需要将进度侦听器附加到内部浏览器。(如果您想查看多个选项卡/窗口,您可能会发现最好将进度侦听器附加到窗口本身,或者,对于服务,附加到根文档加载器。)

我只是在闲逛,您是在页面的加载事件中添加您的方法吗?当页面完成加载时,会调用onLoad吗?当窗口完成加载时,会调用onLoad,例如,在发送网页请求之前,在chrome窗口中会调用onLoad?从mozilla文档中,我了解到这一点。至少我知道我得到了一些组件的DNS查找时间,但aStatus始终为0这一事实仍然让我感到困惑:如何将进度侦听器附加到窗口?此外,“根文档加载器”是什么?@SergiuToarca根文档加载器是组件
@mozilla.org;装卸工;1
接收浏览器中的所有进度事件。要将进度侦听器附加到窗口,需要其nsIWebProgress对象;您可以在包含的浏览器元素上使用webProgress属性,也可以在窗口上调用getInterface(可能必须先获取nsIDocShell)。