new Audio
creates a new <audio>
HTML element - this only works in a context that is bound to a document. SDK modules execute in a context however that has no document, consequently no DOM methods will work including this one. A work-around would be loading about:blank
via page-worker
module and injecting a content script there. You could then send messages to that content script and let it play audio for you whenever you need it.
The alternative would be using nsISound.play()
, something along these lines:
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);
Note that nsISound
is likely to be deprecated soon. It is an old API that is inferior to HTML5 audio.