NS_ERROR_FAILURE

Je suis en train de mettre en œuvre la base XHR d'écoute comme décrit sur "Ashita" cependant, lors du chargement de firefox avec l'extension, j'obtiens cette erreur à chaque fois qu'une page tente de charge qui empêche tout de chargement: Error: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIBinaryInputStream.readBytes]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: chrome://xhrlogger/content/overlay.js :: anonymous :: line 68" data: no]

Mon overlay.js est:

if (typeof Cc == "undefined") { 
var Cc = Composants.les classes; 
} 
if (typeof Ci == "undefined") { 
var Ci = Composants.interfaces; 
} 
if (typeof CCIN == "undefined") { 
fonction NIEC(cName, ifaceName){ 
retour Cc[cName].createInstance(Ic[ifaceName]); 
} 
} 
if (typeof CCSV == "undefined") { 
fonction CCSV(cName, ifaceName){ 
si (Cc[cName]) 
//si fbs ne parvient pas à charger, l'erreur peut être _CC[cName] n'a pas de propriétés 
retour Cc[cName].la méthode getService(Ic[ifaceName]); 
d'autre 
dump("CCSV échoue pour le cName:" + cName); 
}; 
} 

var httpRequestObserver = { 

observer: function(request, atopique, aData){ 
si atopique == "http-sur-analyser-réponse") { 
var newListener = new TracingListener(); 
demande.QueryInterface(Ci.nsITraceableChannel); 
newListener.originalListener = request.setNewListener(newListener); 
} 
}, 

QueryInterface: function(et){ 
si (et.equals(Ci.nsIObserver) || 
aIID.equals(Ci.nsISupports)) { 
retour; 
} 

jeter des Composants.résultats.NS_NOINTERFACE; 

}, 
}; 


fonction TracingListener() { 
c'.receivedData = []; //initialisation de la matrice de 
} 

TracingListener.prototype = 
{ 
originalListener: null, 
receivedData: null, //un tableau de données entrants. 

onDataAvailable: function(request, contexte, inputStream, offset, count) { 
var binaryInputStream = NIEC("@mozilla.org/binaryinputstream;1", 
"nsIBinaryInputStream"); 
binaryInputStream.setInputStream(inputStream); 

var storageStream = NIEC("@mozilla.org/storagestream;1", 
"nsIStorageStream"); 
//8192 est la taille du segment en octets, décompte de la taille maximale du flux en octets 
storageStream.init(8192, le comte, null); 

var binaryOutputStream = NIEC("@mozilla.org/binaryoutputstream;1", 
"nsIBinaryOutputStream"); 
binaryOutputStream.setOutputStream(storageStream.getOutputStream(0)); 

//Copie les données reçues comme ils viennent. 
var data = binaryInputStream.readBytes(count); 

c'.receivedData.push(données); 

binaryOutputStream.writeBytes(données, count); 

//Passer sur la chaîne 
c'.originalListener.onDataAvailable(demande, le contexte, inputStream, offset, count); 
}, 

onStartRequest: function(request, context) { 
c'.originalListener.onStartRequest(demande, contexte); 
}, 

onStopRequest: function(request, contexte, statusCode) { 
essayez 
{ 
//QueryInterface en HttpChannel pour accéder à originalURI et requestMethod propriétés 
demande.QueryInterface(Ci.nsIHttpChannel); 

var data = null; 
si (la demande.requestMethod.toLowerCase() == "post") 
{ 
var postText = ce.readPostTextFromRequest(demande, contexte); 
si (postText) 
données = ((String)(postText)).parseQuery(); 

} 

//Combiner la réponse en une chaîne unique 
var responseSource = ce.receivedData.join("); 

//fixer les espaces bug 
//(FM ajoute parfois des espaces pour le début de leurs réponses ajax... 
//qui rompt le XML) 
responseSource = responseSource.replace(/^\s+(\S[\s\S]+)/, "$1"); 

//récupère la date à partir des en-têtes de réponse à la demande. 
//Pour PirateQuesting ce choix a été préféré au cours de la date sur l'ordinateur de l'utilisateur 
var date = date.parse(la demande.getResponseHeader("Date")); 

//Encore un PQ spécifiques de l'appel de fonction, mais a laissé comme un exemple. 
//C'est juste transmet une chaîne d'URL, le texte de la réponse, 
//la date, et les données dans la requête POST (si applicable) 
/* piratequesting.ProcessRawResponse(requête.originalURI.spec, 
responseSource, 
date, 
données); */
dump(date); 
dump(données); 
dump(responseSource); 
} 
catch (e) 
{ 
//fonction standard pour vider une version mise en forme de l'erreur dans la console 
dump(e); 
} 

c'.originalListener.onStopRequest(demande, le contexte, statusCode); 
}, 
readPostTextFromRequest : function(request, context) { 
essayez 
{ 
var = request.QueryInterface(Ci.nsIUploadChannel).uploadStream; 
si (est) 
{ 
var ss = est.QueryInterface(Ci.nsISeekableStream); 
var prevOffset; 
si (ss) 
{ 
prevOffset = ss.tell(); 
ss.seek(Ci.nsISeekableStream.NS_SEEK_SET, 0); 
} 

//Lecture de données à partir du flux.. 
var charset = "UTF-8"; 
var texte = ce.readFromStream(est, charset, true); 

si (ss && prevOffset == 0) 
ss.seek(Ci.nsISeekableStream.NS_SEEK_SET, 0); 

de retour de texte; 
} 
else { 
dump("Echec de l'Interface de recherche pour télécharger des flux.\n"); 
} 
} 
catch(exc) 
{ 
dump(exc); 
} 

return null; 
}, 

QueryInterface: function (et) { 
si (et.equals(Ci.nsIStreamListener) || 
aIID.equals(Ci.nsISupports)) { 
retour; 
} 
jeter des Composants.résultats.NS_NOINTERFACE; 
}, 
readFromStream : function(flux, charset, noClose) { 

var sis = CCSV("@mozilla.org/binaryinputstream;1", 
"nsIBinaryInputStream"); 
le sis.setInputStream(stream); 

var segments = []; 
for (var count = stream.disponible(); compteur; compteur = stream.disponible (en)) 
les segments.push(sis.readBytes(nombre)); 

if (!noClose) 
le sis.close(); 

var texte = segments.join(""); 
de retour de texte; 
} 

} 

var observerService = Cc["@mozilla.org/observer-service;1"] 
.la méthode getService(Ci.nsIObserverService); 

observerService.addObserver(httpRequestObserver, 
"http-sur-analyser-réponse", false); 

dump("WTFBBQ"); 

Toute aide serait appréciée.

OriginalL'auteur OverlordQ | 2010-01-30