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

将返回 “音频不definied”如何在扩展中播放音频?

我也尝试了经典修复:

var audio = require("audio"); 

,但没有运气。我可以在main.js的扩展的其他部分添加音频播放,就像某些内容脚本的工作原理一样,但也许有一个更简单和优雅的解决方案。

+0

您可以使用jPlayer吗? –

+0

当你console.log(新音频)时会发生什么;或console.dir(音频) –

+0

控制台日志只是返回音频未定义。我看了一下jPlayer,看起来更像是一种在html中创建播放器并控制和设计它的方法......我也不太确定如何在main.js中使用它,并且不会粘贴它。 – DoTheEvo

回答

6

new Audio创建一个新的<audio> HTML元素 - 在上下文这只能绑定到一个文件。 SDK模块在没有文档的上下文中执行,因此不包括这个DOM方法。解决方法是通过page-worker module加载about:blank并在那里注入内容脚本。然后,您可以将消息发送到该内容脚本,并在需要时让它为您播放音频。

另一种方法是使用nsISound.play(),东西沿着这些线路:

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

注意nsISoundlikely to be deprecated很快。这是一个不如HTML5音频的旧API。

+2

谢谢。页面工作者系统运行良好,虽然我在我的[data]目录中使用了空白html而不是about:blank。我也把计时器放在构造函数中,在被调用后的30秒时间内完成页面工作,当完成警告声时... – DoTheEvo

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

这是正确答案,完美工作。 –

+1

音频对象上是否有文档?我如何使用它来播放声音? – timgeb

+1

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