2012-05-19 11 views
5
AudioObj = new Audio; 

volverá "El audio no se definied"¿Cómo se reproduce audio en una extensión?

También probé la solución clásica:

var audio = require("audio"); 

pero sin suerte. Podría agregar reproducción de audio en alguna otra parte de la extensión que en main.js, como algún script de contenido donde funciona, pero tal vez haya una solución más simple y elegante.

+0

¿Podría usar jPlayer en su lugar? –

+0

¿Qué sucede cuando console.log (audio nuevo); o console.dir (Audio) –

+0

registros de la consola solo devuelve que el audio no está definido. Eché un vistazo a jPlayer y parece más una forma de crear un reproductor en html y controlarlo y diseñarlo ... tampoco estoy muy seguro de cómo lo usaría en main.js, excepto de pegarlo todo. – DoTheEvo

Respuesta

6

new Audio crea un nuevo elemento HTML <audio> - esto sólo funciona en un contexto que está enlazado a un documento. Los módulos SDK se ejecutan en un contexto que no tiene ningún documento, por lo tanto, no funcionarán los métodos DOM, incluido este. Una solución alternativa sería cargar about:blank a través de page-worker module e inyectar allí un script de contenido. A continuación, puede enviar mensajes a ese script de contenido y dejar que reproduzca audio siempre que lo necesite.

La alternativa sería el uso de nsISound.play(), algo a lo largo de estas líneas:

var {Cc, Ci} = require("chrome"); 
var sound = Cc["@mozilla.org/sound;1"].createInstance(Ci.nsISound); 
var uri = Cc["@mozilla.org/network/io-service;1"] 
      .getService(Ci.nsIIOService) 
      .newURI(self.data.url(...), null, null); 

sound.play(uri); 

Tenga en cuenta que es nsISoundlikely to be deprecated pronto. Es una antigua API que es inferior al audio HTML5.

+2

Gracias. El sistema de trabajador de página funciona bien, aunque lo estoy usando en un html vacío en mi directorio [data] que en about: blank. También pongo el temporizador en el constructor para matar al trabajador de la página 30 segundos después de ser llamado, cuando el sonido de alerta está hecho ... – DoTheEvo

4
var window = require("sdk/window/utils").getMostRecentBrowserWindow(); 
AudioObj = new window.Audio; 
+0

Esta es la respuesta correcta, funciona perfectamente. –

+1

¿Hay documentación sobre el objeto de audio? ¿Cómo lo uso para reproducir un sonido? – timgeb

+1

var audio = ('http://example.com/audio.mp3'); audio.play(); –

Cuestiones relacionadas