AudioObj = new Audio;
将返回“未定义音频”
我还尝试了经典的修复方法:
var audio = require("audio");
但不幸的是,我没有成功。我可以在一些扩展的其他部分(例如一些内容脚本)中添加音频播放功能,从而使其工作,但也许有一种更简单和优雅的解决方案。
AudioObj = new Audio;
将返回“未定义音频”
我还尝试了经典的修复方法:
var audio = require("audio");
但不幸的是,我没有成功。我可以在一些扩展的其他部分(例如一些内容脚本)中添加音频播放功能,从而使其工作,但也许有一种更简单和优雅的解决方案。
new Audio
创建一个新的 <audio>
HTML 元素,但只能在绑定到文档的上下文中运行。SDK 模块在没有文档的上下文中执行,因此包括此方法在内的任何 DOM 方法都无法工作。解决方法是通过page-worker
模块加载 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
很快将被废弃。这是一个旧的API,比HTML5音频功能差。var window = require("sdk/window/utils").getMostRecentBrowserWindow();
AudioObj = new window.Audio;
main.js没有访问Web内容中通常存在的DOM API的权限。如果您想使用DOM API,则需要使用内容脚本。有关SDK模块系统如何工作的更多信息,请参阅文档:
https://addons.mozilla.org/en-US/developers/docs/sdk/1.7/dev-guide/guides/commonjs.html