我正在创建一个Chrome扩展程序,它可以显示下载进度。我能够捕获下载开始并下载完整的事件,但不知道如何获得改变的进度?请帮忙。 下面是我的下载监听器
function AddDownloadListener() {
//--------------------------------------------------------------------------------------------------------------
chrome.downloads.onCreated.addListener(DownloadCreated);
chrome.downloads.onChanged.addListener(DownloadChanged);
function DownloadCreated(el) {
console.log("Download Begins");
console.log(el);
mobjPortToFoxtrot.postMessage({ message: "Download Begins", element: el });
}
//--------------------------------------------------------------------------------------------------------------
function DownloadChanged(el) {
if (el.danger === undefined || el.danger == null) {
console.log(el.state.current);
mobjPortToFoxtrot.postMessage({ message: el.state.current, element: el });
}
else {
console.log("dangerous content");
mobjPortToFoxtrot.postMessage({ message: "dangerous content", element: el });
}
console.log(el);
}
}
答案 0 :(得分:3)
你不能以基于事件的方式这样做。
来自onChanged
documentation(强调我的):
当
DownloadItem
的任何属性除bytesReceived
和estimatedEndTime
之外的任何内容发生更改时,此事件将使用downloadId
和包含的对象触发改变的属性。
这意味着Chrome不会针对下载进度触发事件,这种情况有道理:这种情况经常发生变化,您不希望在每个网络数据包之后触发事件。
由您决定以合理的速率(即每当有活跃下载时每秒)进行一次这样的事情:
// Query the proportion of the already downloaded part of the file
// Passes a ratio between 0 and 1 (or -1 if unknown) to the callback
function getProgress(downloadId, callback) {
chrome.downloads.search({id: downloadId}, function(item) {
if(item.totalBytes > 0) {
callback(item.bytesReceived / item.totalBytes);
} else {
callback(-1);
}
});
}