如何在分机中播放音频?

DoT*_*Evo 5 javascript firefox-addon html5-audio firefox-addon-sdk

AudioObj = new Audio;
Run Code Online (Sandbox Code Playgroud)

将返回"音频未定义"

我也尝试了经典修复:

var audio = require("audio");
Run Code Online (Sandbox Code Playgroud)

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

Wla*_*ant 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);
Run Code Online (Sandbox Code Playgroud)

请注意,nsISound可能很快就会弃用.这是一个不如HTML5音频的旧API.

  • 谢谢.页面工作者系统运行良好,虽然我在我的[data]目录中的空html上使用它而不是about:blank.我也把定时器放在构造函数上,在被叫之后30秒杀死页面工作者,当警报声完成时...... (2认同)