2012-01-02 623 views
9

Estoy escribiendo una extensión de FireFox y quiero cargar datos del servidor. Pero cuando intento inicializar el XMLHttpRequest con:XMLHttpRequest en la extensión de Firefox

var request = new XMLHttpRequest(); 

La consola de error dice:

ReferenceError: XMLHttpRequest is not defined 

¿Tengo que incluir algo o por qué el XMLTttpRequest no se reconoce?

+1

Es el código dentro de un módulo de JavaScript? Si es así, eche un vistazo a https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Using_XMLHttpRequest_from_JavaScript_modules_.2F_XPCOM.C2.A0components –

+0

¡Hola, Felix! Lo estoy usando en main.js dentro de una función. Pero cuando lo hago a tu manera, el constructor agrega que 'el archivo xpi no se puede copiar' ... – SteMa

+0

¿Estás usando el nuevo SDK de complemento? Si es así, aún no he trabajado con eso, así que no puedo ayudarte. Lo siento. –

Respuesta

10

El Add-on SDK (que está utilizando indirectamente a través del Add-on Builder) proporciona un request package que es esencialmente un contenedor alrededor de XMLHttpRequest, debe usarlo. Por lo que entiendo, no tiene acceso directo XMLHttpRequest para evitar problemas si el complemento se desinstala/deshabilita mientras se realiza una solicitud.

1

Parece que la respuesta de Wladimir es útil para la mayoría de estos casos. Pero hay un caso más.

que he encontrado la página tris tratar de resolver el problema con este error en Firefox 16. Es extraño, pero nunca he visto este error en Firefox 15.

Tengo este error en la escritura de contenido en algunas páginas. El script se inyectó al inicio:

contentScriptWhen : "start", 

Parece que en algunos casos el objeto de ventana no se inicializó correctamente. Entonces, acabo de cambiar la carga de scripts de principio a fin. Fue posible en mi caso. El problema se ha ido ...

No sé por qué aparece, pero sé la solución y espero que sea útil para alguien.

3

Para usar XMLHttpRequest constructor debe agregar el componente XPCOM constructor:

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

y después de:

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

Más información sobre MDN

Cuestiones relacionadas