javascript - Chrome 扩展程序如何将许多文件保存到用户指定的目录?

标签 javascript google-chrome google-chrome-extension

我正在开发一个用作内部工具的 Chrome 扩展程序。其要求的行为是:

  1. 作为页面操作,在查看某些内部网页时启用地址栏图标。
  2. 当用户点击该图标时,识别页面上某种媒体类型(例如 .jpg)的所有文件,并且
  3. 默默地将它们全部保存到用户本地驱动器上的一个目录中。

This question has been asked before ,但答案是“use NPAPI”,和NPAPI is now derelict .

那么,目前可用的方法是什么?我看过的是:

  • chrome.FileSystem API --- 但这不会将文件保存在任何用户可访问的位置。相反,存储的文件是 hidden behind obfuscated names在未记录的目录中。用户要求文件以其原始名称存储在可访问的目录中。
  • The HTML5 download attribute ,通过创建数据:URL 并以编程方式单击它。这会为每个文件弹出一个“另存为...”对话框,当单个页面上有一百个 Assets 时,这是 Not Acceptable 。用户要求下载文件时,除了单击单个图标外,无需进一步交互。
  • Chrome Download API ,但这仅适用于测试版和开发 channel 。用户需要此扩展与主流 Chrome 一起使用。
  • 使用Native Messaging API通过创建一个小的 .exe 来简单地将文件保存到磁盘,然后将 .jpg 作为 blob 传递给它。这看起来很麻烦,我什至不确定如何可靠地将大 blob 传递给这样的 EXE。

我可以尝试另一种方法吗?

最佳答案

您已经做了很多研究。事实上,没有任何插件或扩展,常规网页无法写入用户的文件系统。此外,HTML5 Filesystem API如您所见,仅提供对虚拟文件系统的访问。

但是,您混淆了 chrome.fileSystem API 与 HTML5 文件系统 API。与 HTML 文件系统 API 不同,Chrome 的 fileSystem (app) API 可以直接写入到用户的文件系统(例如 ~/Documents% USERPROFILE%\Documents), 由用户指定。

此 API 仅适用于 Chrome 应用,不适用于扩展程序。这不是问题,特别是因为您正在开发内部工具,因为您可以安装应用程序和扩展程序,并使用 message passing在扩展程序(页面操作)和应用程序(文件系统访问)之间进行通信 ( example )。


关于chrome.downloads :由于您的扩展是内部的,您可能会强制用户进入 beta/dev channel 才能使用此 API。此 API 的唯一限制是文件将保存在用户定义的下载文件夹(的子目录)中。

编辑:chrome.downloads API 现在可用于所有 channel ,包括稳定分支(自 Chrome 31 起)。

关于javascript - Chrome 扩展程序如何将许多文件保存到用户指定的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19802032/

相关文章:

security - 操作系统不信任 SSL 证书

javascript - 调试 Chrome 扩展的 popup.html?

jquery - 如何为 popup.html 中的多个不同链接打开并使用同一选项卡

javascript - Intellij idea Javascript 格式化和突出显示

apache - XAMPP 虚拟主机不工作

google-chrome - Chrome 扩展本地存储 : Background. html 无权访问本地存储?

javascript - 添加文件 ://. 权限到 chrome 扩展

javascript - 从 JavaScript 对象中随机选择值

javascript - WinJS加载本地json文件

javascript - 使用 Javascript 或 jquery 动态显示多个图像