如何在分机中播放音频?

时间:2012-05-19 01:08:39

标签: javascript firefox-addon html5-audio firefox-addon-sdk

AudioObj = new Audio;

将返回“Audio is not definied”

我也尝试过经典修复:

var audio = require("audio");

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

3 个答案:

答案 0 :(得分: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);

请注意,nsISound很快就会likely to be deprecated。这是一个不如HTML5音频的旧API。

答案 1 :(得分:4)

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

答案 2 :(得分:1)

main.js无权访问通常存在于Web内容中的DOM API。如果要使用DOM apis,则需要使用内容脚本。有关SDK模块系统如何工作的更多信息,请参阅文档:

https://addons.mozilla.org/en-US/developers/docs/sdk/1.7/dev-guide/guides/commonjs.html