我正在尝试向 Firefox 扩展添加功能,以计算网页执行 DNS 查找所需的时间。看看 Firebug,我认为可以通过向浏览器对象添加 Web 进度监听器并监听事件来实现此目的。
首先,我在加载页面时注册一个事件监听器:
window.addEventListener("load", function(e) { myObj.onLoad(e); }, false);
在 myObj.onLoad() 内部,我注册了我的网络进度监听器,如下所示:
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 时,即使 aMessage 显示正确的事件,aStatus 也始终为 0。我花了几个小时试图弄清楚这一点。有什么想法吗??
此外,状态为“Ci.nsISocketTransport.STATUS_RESOLVING”的 onStatusChange 似乎仅在某些组件上被调用,而不会被其他组件调用,即使它们可能具有需要转换的不同域名并且 DNS 已没有被缓存。需要帮助请!
最佳答案
如果将进度监听器附加到选项卡式浏览器,您只能获得进度事件的过滤 View 。您可能会发现需要将进度监听器附加到内部浏览器。 (如果您想观看多个选项卡/窗口,您可能会发现最好将进度监听器附加到窗口本身,或者对于服务,附加到根文档加载器。)
关于javascript - 使用addProgressListener和onStatusChange获取页面的DNS查找时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5575280/