如果文件的扩展名为jpg或png,我如何使用chrome.downloads.onDeterminingFilename更改下载的文件名?

时间:2014-03-29 20:13:09

标签: javascript google-chrome google-chrome-extension google-chrome-devtools

如果文件的扩展名为JPG或PNG,如何使用chrome.downloads.onDeterminingFilename更改下载的文件名?

我在看这个例子:

chrome.downloads.onDeterminingFilename.addListener(function(item, __suggest) {
  function suggest(filename, conflictAction) {
    __suggest({filename: filename,
               conflictAction: conflictAction,
               conflict_action: conflictAction});
  }
  var rules = localStorage.rules;
  try {
    rules = JSON.parse(rules);
  } catch (e) {
    localStorage.rules = JSON.stringify([]);
  }
  for (var index = 0; index < rules.length; ++index) {
    var rule = rules[index];
    if (rule.enabled && matches(rule, item)) {
      if (rule.action == 'overwrite') {
        suggest(item.filename, 'overwrite');
      } else if (rule.action == 'prompt') {
        suggest(item.filename, 'prompt');
      } else if (rule.action == 'js') {
        eval(rule.action_js);
      }
      break;
    }
  }
});

这令人困惑。上面的chrome.downloads.onDeterminingFilename如何检测文件的名称?一旦检测到,它是如何更改文件的?任何人都可以分解这些代码的含义吗?

参考:http://developer.chrome.com/extensions/samples

1 个答案:

答案 0 :(得分:2)

  • 一旦确定了文件名onDeterminingFilename事件 触发一个回调函数被调用,它需要2 参数

    1. item对象,其中包含下载ID,url,文件名,引荐来源等数据(请参阅 https://developer.chrome.com/extensions/downloads#type-DownloadItem
    2. __建议必须同时或异步地传递建议。
  • 定义了一个建议函数,用于调用__suggest 根据具体规则
  • 从本地内存访问所有规则,并运行for循环 迭代它们。
  • 对于基于action中的rule数据的每次迭代 建议函数使用特定的filenameconflictAction

基本上,使用item.filename对文件名进行了通知,并通过调用__suggest建议使用新文件名,其中键filename的值包含新文件名。