Одной из возможностей является использование nsIWebProgressListener для отслеживания хода событий загрузки страницы. onStateChange
метод выполняется с состоянием STATE_STOP
после завершения запроса, даже если пользователь прервал загрузку страницы.
Вот простой пример:
const STATE_START = Components.interfaces.nsIWebProgressListener.STATE_START;
const STATE_STOP = Components.interfaces.nsIWebProgressListener.STATE_STOP;
window.addEventListener("load", function(e) {
gBrowser.addProgressListener({
QueryInterface: function(aIID) {
if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
},
onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) {
if (aFlag & STATE_STOP) {
// load finished or was stopped
alert("stop");
}
},
onLocationChange: function(aProgress, aRequest, aURI) { },
onProgressChange: function(aWebProgress, aRequest, curSelf, maxSelf, curTot, maxTot) { },
onStatusChange: function(aWebProgress, aRequest, aStatus, aMessage) { },
onSecurityChange: function(aWebProgress, aRequest, aState) { }
});
}, false);
Это, конечно, игрушечный пример. Далее читаем о некоторых деталях реализации: