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
Vous devez vous connecter pour publier un commentaire.
Mine semble bien fonctionner avec moins de code. Essayez de remplacer votre onDataAvailable code de fonction avec:
OriginalL'auteur Avindra Goolcharan