В случае XUL / Firefox вам нужен интерфейс nsIIOService, который вы можете получить так:
var mIOS = Components.classes["@mozilla.org/network/io-service;1"].
getService(Components.interfaces.nsIIOService);
Затем вам нужно создать канал и открыть асинхронную ссылку:
var channel = mIOS.newChannel(urlToOpen, 0, null);
channel.asyncOpen(new StreamListener(), channel);
Ключом здесь является StreamListener
объект:
var StreamListener = function() {
return {
QueryInterface: function(aIID) {
if (aIID.equals(Components.interfaces.nsIStreamListener) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
onStartRequest: function(aRequest, aContext)
{ return 0; },
onStopRequest: function(aRequest, aChannel /* aContext */, aStatusCode)
{ return 9; },
onDataAvailable: function(aRequest, aContext, aStream, aOffset, aCount)
{ return 0; }
};
}
Вы должны заполнить детали в функциях onStartRequest
, onStopRequest
, onDataAvailable
, но этого должно быть достаточно, чтобы начать работу. Вы можете посмотреть, как я использовал этот интерфейс в своем расширении Firefox (он называется IdentFavIcon, и его можно найти на сайте дополнений mozilla).
Часть, в которой я не уверен, заключается в том, как вы можете время от времени вызывать этот запрос страницы, однако, set_timeout()
, вероятно, должен работать.
Edit:
- См. Пример здесь (см. Раздел Загрузка изображений ) для примера о том, как собрать загруженные данные в одну переменную; и
- См. на этой странице о том, как преобразовать источник HTML в дерево DOM.
НТН.