首先,这个问题不重复,因为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,但我不明白我应该在哪里测试它 或者,是否有办法在保留所述功能的同时使此代码无错?