2012-01-02 19 views
9

Sto scrivendo un'estensione FireFox e voglio caricare i dati dal server. Ma quando cerco di inizializzare il XMLHttpRequest con:XMLHttpRequest in Firefox Extension

var request = new XMLHttpRequest(); 

La console di errore dice:

ReferenceError: XMLHttpRequest is not defined 

Devo includere qualcosa o perché il XMLTttpRequest non viene riconosciuto?

+1

è il codice all'interno di un modulo JavaScript? Se è così, dai un'occhiata a https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Using_XMLHttpRequest_from_JavaScript_modules_.2F_XPCOM.C2.A0components –

+0

Ciao Felix! Lo sto usando nel main.js all'interno di una funzione. Ma quando lo faccio a modo tuo il builder add-on dice 'il file xpi non può essere copiato' ... – SteMa

+0

Stai usando il nuovo SDK dell'addon? Se è così, non ho ancora lavorato con lui, quindi non posso aiutarti. Scusate. –

risposta

10

L'SDK dell'add-on (che si utilizza indirettamente tramite l'Add-on Builder) fornisce un request package che è essenzialmente un wrapper attorno a XMLHttpRequest, dovresti usarlo. Da quello che ho capito, non ti viene dato l'accesso diretto XMLHttpRequest per evitare problemi se il componente aggiuntivo viene disinstallato/disabilitato mentre viene eseguita una richiesta.

1

Sembra che la risposta di Wladimir sia utile per la maggior parte di questi casi. Ma c'è un altro caso.

ho trovato la pagina tris cercando di risolvere il problema con questo errore sotto Firefox 16. Strano, ma non ho mai visto questo errore in Firefox 15.

ho ottenuto questo errore nello script contenuti su alcune pagine. Lo script è stato iniettato in partenza:

contentScriptWhen : "start", 

Sembra che in alcuni casi oggetto di finestra non è stata inizializzata correttamente. Quindi, ho appena cambiato il caricamento degli script dall'inizio alla fine. Era possibile nel mio caso. Il problema è andato ...

Non so perché sembra, ma so soluzione e spero che possa essere utile per qualcuno.

3

Per utilizzando il costruttore XMLHttpRequest si dovrebbe aggiungere il costruttore componente XPCOM:

const XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1", "nsIXMLHttpRequest"); 

e dopo:

// some code 
var req = new XMLHttpRequest(); 
// some code 

Maggiori informazioni MDN