solución asincrónica utilizando XPCOM que puede leer desde cualquier esquema (chrome: //, de recursos: // http: //, ...):
const Cc = Components.classes;
const Ci = Components.interfaces;
const nsIIOService = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService);
function get_url_async(_url, /* function(data) */ _callback_success, /* function(status) */ _callback_fail)
{
var channel=nsIIOService.newChannel(_url,null,null);
channel.asyncOpen(
{
buffer:null,
onStartRequest: function(/*in nsIRequest*/ aRequest, /*in nsISupports*/ aContext)
{
this.buffer = "";
},
onStopRequest: function(/*in nsIRequest*/ aRequest, /*in nsISupports*/ aContext, /*in nsresult*/ aStatusCode)
{
if(aStatusCode === Cr.NS_OK)
_callback_success(this.buffer);
else
_callback_fail(aStatusCode);
},
onDataAvailable: function(/*in nsIRequest*/ aRequest, /*in nsISupports*/ aContext, /*in nsIInputStream*/ aInputStream, /*in unsigned long*/ aOffset, /*in unsigned long*/ aCount)
{
var scriptable_in_stream = Cc["@mozilla.org/scriptableinputstream;1"]
.createInstance(Ci.nsIScriptableInputStream);
scriptable_in_stream.init(aInputStream);
this.buffer += scriptable_in_stream.read(aCount);
scriptable_in_stream.close();
}
},
/* context */ null
);
}
Uso:
get_url_async(
"resource://stuff.html",
function success(html)
{
// actions with html
},
function fail(status)
{
dump("Cannot get resource://stuff.html status code:"+status);
}
);
componentes que XPCOM? Realmente no puedo entender la documentación de Firefox, que parece no tener ningún índice de componentes disponibles. Además, si especifico una ruta relativa en FileIO.open, ¿dónde se enrutará? – Zarkonnen
@Zarkonnen Actualizado el código de muestra. Necesita componentes Mozilla I/O XPCOM (@ mozilla.org/file/*) – racetrack