下载完成后播放声音

时间:2014-10-30 17:28:55

标签: javascript audio google-chrome-extension

嘿,伙计们是Chrome扩展开发的新手。我决定制作一个与下载管理器相同的chrome扩展。我正在尝试添加一个功能,例如下载项目完成时必须播放音频。所以我尝试过研究这个并发现了onCreated事件。我认为这就是我想要的......

所以我尝试了像

这样的代码
DownloadItem.prototype.onCreated = function() {
  if (this.state == 'complete') {
var c = new Audio('Link to an audio source');
c.play();
}

但它没有做任何事情。在项目下载完毕后我无法听到声音。

这是我的manifest.json

根据编辑..

在音频中起作用的主要代码是

popup.js

if (chrome.downloads) {
  DownloadManager.loadItems();
  chrome.downloads.onCreated.addListener(function(item) {
DownloadManager.getOrCreate(item);
DownloadManager.showNew();
DownloadManager.startPollingProgress();
  });

  chrome.downloads.onChanged.addListener(function(delta) {
var item = DownloadManager.getItem(delta.id);
if (item) {
  item.onChanged(delta);
}
  });

  chrome.downloads.onErased.addListener(function(id) {
var item = DownloadManager.getItem(id);
if (!item) {
  return;
}
item.onErased();
DownloadManager.loadItems();
  });

  chrome.downloads.onChanged.addListener(function(delta) {
  if (delta.state.current == "complete") {
   var c = new Audio('http://www.html5rocks.com/en/tutorials/audio/quick/test.mp3');
c.play();
}
});

清单

{"name": "__MSG_extName__",
 "version": "0.3",
 "manifest_version": 2,
 "description": "__MSG_extDesc__",
 "icons": {"128": "icon128.png"},
 "browser_action": {
   "default_icon": {
 "19": "icon19.png",
 "38": "icon38.png"},
   "default_title": "__MSG_extName__",
   "default_popup": "popup.html"},
 "background": {"persistent": false, "scripts": ["background.js"]},
 "default_locale": "en",
 "optional_permissions": ["management"],
 "permissions": ["downloads", "downloads.open", "downloads.shelf", "notifications"]}

可以找到整个代码here

1 个答案:

答案 0 :(得分:0)

首先,这是一个错误的事件。显然应该在创建下载时触发​​onCreated,因此保证完成。它不会再次开火了。

接下来,您使用Chrome API events错误。

  1. 它们未附加到特定DownloadItem,但会在全球范围内发送,即chrome.downloads.onCreated

  2. 事件不是要执行的函数(如HTML元素上的onclick),它是一个带有方法addListener的对象来附加处理程序。

  3. 把它放在一起,然后看看chrome.downloads API,你需要这个:

    chrome.downloads.onChanged.addListener(function(delta) {
      if (delta.state.current == "complete") {
        // Play sound
      }
    });