Javascript:未捕获错误:下载的侦听器太多

Javascript: Uncaught Error: Too many listeners for downloads.onDeterminingFilename

本文关键字:侦听器 太多 下载 Javascript 错误      更新时间:2023-09-26

这是代码:

assets.forEach(function(v) {
    var canvas = document.createElement('canvas');
    canvas.id     = "canvas";
    canvas.width  = 200;
    canvas.height = 150;
    var ctx = canvas.getContext("2d");
    var img = new Image();
    img.src = 'file:///path/to/file/' + v.name;
    img.onload = function () {
        ctx.drawImage(img, 0, 0, img.width, img.height-256, 0, 0, 200, 150);
    };
    document.getElementById('download').addEventListener('click',
        function() {
            chrome.downloads.download({
                url: canvas.toDataURL()
            });
            chrome.downloads.onDeterminingFilename.addListener(
                function(downloadItem, cb) {
                    console.log(downloadItem);
                    cb({
                        filename: 'path/to/file/thumb-' + v.name.split('_')[0] + '.png',
                        conflictAction: 'overwrite'
                    });
                    return true;
                }
            );
        },
    false
    );
});

如果文件夹中只有 1 个文件,则此方法有效。如果更多,那么它仅适用于单个文件。如何弄清楚它以便它适用于许多文件?

请注意,它将新缩略图保存到初始图像所在的同一文件夹中。

不能有多个onDeterminingFilename侦听器:

确定文件名

在文件名确定过程中,扩展名将有机会覆盖目标 DownloadItem.filename。每个扩展不能为此事件注册多个侦听器。