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

torneranno "Audio non è definied"Come riprodurre l'audio in un'estensione?

Ho provato anche la correzione classica:

var audio = require("audio"); 

ma senza fortuna. Potrei aggiungere la riproduzione audio in qualche altra parte dell'estensione rispetto a main.js, come alcuni script di contenuto in cui funziona, ma forse esiste una soluzione più semplice ed elegante.

+0

È possibile utilizzare invece jPlayer? –

+0

Cosa succede quando consenti.log (nuovo Audio); o console.dir (Audio) I registri della console –

+0

restituiscono che l'audio non è definito. Ho dato uno sguardo a jPlayer e sembra più un modo di creare un player in html e controllarlo e disegnarlo ... anche io non sono sicuro di come lo userei in main.js, a meno di incollarlo tutto dentro. – DoTheEvo

risposta

6

new Audio crea un nuovo elemento <audio> HTML - questo funziona solo in un contesto che è destinato a un documento. I moduli SDK vengono eseguiti in un contesto, tuttavia, che non ha alcun documento, di conseguenza nessun metodo DOM funzionerà, incluso questo. Un work-around potrebbe caricare about:blank tramite page-worker module e iniettare lì uno script di contenuto. È quindi possibile inviare messaggi a quello script di contenuto e lasciarlo riprodurre l'audio per te ogni volta che ne hai bisogno.

L'alternativa sarebbe utilizzare nsISound.play(), qualcosa in questo senso:

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); 

noti che nsISound è likely to be deprecated presto. È una vecchia API che è inferiore all'audio HTML5.

+2

Grazie. Il sistema Page-worker funziona bene, anche se lo sto usando su un html vuoto nella mia cartella [data] piuttosto che su about: blank. Ho anche messo il timer sul costruttore per uccidere il lavoratore della pagina 30 secondi dopo essere stato chiamato, quando il suono di avviso è finito ... – DoTheEvo

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

Questa è la risposta corretta, funziona perfettamente. –

+1

C'è documentazione sull'oggetto audio? Come si usa per riprodurre un suono? – timgeb

+1

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

Problemi correlati