繁体   English   中英

下载完成后播放声音

[英]Play sound when download finishes

大家好,我是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"]}

完整的代码可以在这里找到

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

接下来,您正在使用错误的Chrome API事件

  1. 它们没有附加到特定的DownloadItem ,而是在全局范围内调度,即chrome.downloads.onCreated

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

放在一起,看看chrome.downloads API ,您需chrome.downloads

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM