【问题标题】:How to play audio in an extension?如何在扩展中播放音频?
【发布时间】:2012-05-19 01:08:39
【问题描述】:
AudioObj = new Audio;

将返回“音频未定义”

我也尝试了经典修复:

var audio = require("audio");

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

【问题讨论】:

  • 你能用jPlayer代替吗?
  • console.log(new Audio);或 console.dir( Audio )
  • 控制台日志只返回未定义的音频。我看了一下 jPlayer,它似乎更像是一种在 html 中创建播放器并控制和设置样式的方法......我也不确定如何在 main.js 中使用它,而不是全部粘贴进去。 .

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


【解决方案1】:

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。它是一个旧 API,不如 HTML5 音频。

【讨论】:

  • 谢谢。 Page-worker 系统运行良好,尽管我在 [data] 目录中的空 html 上使用它而不是在 about:blank 上使用它。我还在构造函数上放置了计时器,以在被调用 30 秒后杀死页面工作者,当警报声音完成时......
【解决方案2】:
var window = require("sdk/window/utils").getMostRecentBrowserWindow();
AudioObj = new window.Audio;

【讨论】:

  • 是否有关于音频对象的文档?如何使用它来播放声音?
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2021-02-18
    相关资源
    最近更新 更多