[英]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 。
按照编辑。
在音频中起作用的主要代码是
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事件 。
它们没有附加到特定的DownloadItem
,而是在全局范围内调度,即chrome.downloads.onCreated
。
事件不是要执行的函数(例如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.