AudioObj = new Audio;
将返回“音频未定义”
我还尝试了经典修复:
var audio = require("audio");
但没有运气。我可以在扩展的其他部分而不是在 main.js
中添加音频播放,就像它工作的一些内容脚本一样,但也许有一个更简单和优雅的解决方案。
最佳答案
new Audio
创建一个新的 <audio>
HTML 元素 - 这仅适用于绑定(bind)到文档的上下文。 SDK 模块在没有文档的上下文中执行,因此没有 DOM 方法将起作用,包括这个方法。解决方法是加载 about:blank
通过 page-worker
module并在那里注入(inject)内容脚本。然后,您可以向该内容脚本发送消息,并让它在您需要时为您播放音频。
替代方法是使用 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很快。它是一个旧 API,不如 HTML5 音频。
关于javascript - 如何在扩展中播放音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10661507/