5
AudioObj = new Audio;

将返回“音频未定义”

我还尝试了经典修复:

var audio = require("audio");

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

4

3 回答 3

6

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

另一种方法是使用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可能很快就会被弃用。它是一个旧 API,不如 HTML5 音频。

于 2012-05-21T06:15:32.537 回答
4
var window = require("sdk/window/utils").getMostRecentBrowserWindow();
AudioObj = new window.Audio;
于 2014-06-26T05:25:35.603 回答
1

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

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

于 2012-05-21T01:52:54.587 回答