编写扩展名以默认覆盖现有文件

时间:2016-02-09 22:59:54

标签: javascript asynchronous google-chrome-extension callback

首先,这个问题不重复,因为suggest函数没有针对'chooseEntry'的回调。

我正在尝试为Chrome编写扩展程序,默认情况下会覆盖文件,而不是建议使用带有“(1)”等尾随数字的副本。
扩展应该:

  • 包含切换此未来的选项
  • 建议文件名没有尾随编号,打开时
  • 关闭时,
  • 记住最新的下载位置
  • 始终使用此位置打开文件选择器

这是我的第一个方法:

chrome.downloads.onDeterminingFilename.addListener(function(item, suggest) {
    chrome.storage.local.get(function(options) {
        // retrieve preference from option page
        var suggestion = {filename: item.filename};
        if (options["opOverwrite"]) suggestion["conflictAction"] = "overwrite";
        suggest(suggestion);
    });
    return true;
});

工作正常,但不记得上次下载位置,而是打开默认下载目录 - 这是我不想要的。所以我尝试通过查询上次成功下载及其位置(似乎是唯一的方法)来扩展它。

chrome.downloads.onDeterminingFilename.addListener(function(item, suggest) {
    // retrieving latest successfull download <-> filename not empty
    var query = {filenameRegex: ".+", orderBy: ["-startTime"], limit: 1};

    chrome.downloads.search(query, function(results) {
        // results : Array
        // Cutting of the filename, leaving the actual location – empty if none found
        var lastLocation = (results.length > 0 ? results[0]["filename"].match(/.+\\/)[0] : "");
        chrome.storage.local.get(function(options) {
            var suggestion = {filename: lastLocation};
            if (options["opOverwrite"]) suggestion["conflictAction"] = "overwrite";
            suggest(suggestion);
        });
    });
    return true;
});

现在按预期工作,除了它抛出 Unchecked runtime.lastError while running downloadsInternal.determineFilename: Invalid filename的{​​{1}}!

实际上,chrome扩展文档声明“绝对路径,空路径和包含反向引用的路径'..'将被忽略。” (无论如何,它打开文件选择器中的绝对路径)。但是,我的下载位置并不总是默认下载文件夹的子目录,因此无法相对说明。

那我怎么'抓住'这个错误?扩展在前端工作正常。其他人建议检查是否已设置runtime.lastError,但我不明白我应该在哪里测试它 或者,是否有办法在保留所述功能的同时使此代码无错?

0 个答案:

没有答案