Chrome扩展程序如何将许多文件保存到用户

我正在研究Chrome扩展程序以用作内部工具。 其要求的行为是:

  • 作为页面操作,在查看特定内联网页面时启用地址栏图标。
  • 当用户点击图标时,识别页面上某种媒体类型(比如说.jpg)的所有文件
  • 静静地将它们全部保存到用户本地驱动器上的目录中。
  • 这个问题之前已经被问到过,但是答案是“使用NPAPI”,现在NPAPI已经失效了。

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

  • chrome.FileSystem API--但不会将文件保存在任何用户可访问的位置。 相反,存储的文件隐藏在未公开的目录中的混淆名称后面。 用户要求文件以原始名称存储在可访问的目录中。
  • HTML5下载属性,通过创建一个data:URL并以编程方式点击它。 这会弹出每个文件的“另存为...”对话框,当单个页面上有一百个资源时,这是不可接受的。 用户要求文件在没有进一步交互的情况下进行下载,超出单个图标点击。
  • Chrome下载API,但仅适用于测试版和开发者版。 用户需要使用主流Chrome浏览器的扩展程序。
  • 通过创建一个小的.exe文件来简单地将文件保存到磁盘,然后将.jpg作为blob传递给它,以使用本机消息API。 这看起来非常麻烦,我甚至不知道如何可靠地将大块blob传递给这样的EXE。
  • 我可以尝试另一种方法吗?


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

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

    此API仅适用于Chrome 应用 ,而不适用于扩展程序。 这不是问题,尤其是因为您正在开发内部工具,因为您可以安装应用程序和扩展,并使用消息传递来在扩展(页面操作)和应用程序(文件系统访问)(示例)之间进行通信。


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

    编辑: chrome.downloads API现在可用于所有渠道,包括稳定的分支(自Chrome 31以来)。


    我担心你已经完成了功课,这意味着你考虑了所有可能的选择。

    使用支持的本地应用程序并通过本地消息传递进行通信(正如您所提到的那样),实现您想要的内容的最佳方式是。 顺便说一下,由于带宽在内联网上很少出现问题,因此您可能会发现传递资源(例如图像)URL并下载应用程序并将其保存起来更简单。
    (是的,这会比简单地开发扩展程序更麻烦,但是他们必须做他们必须做的事,对吧?)

    另一方面,如果您愿意牺牲一点用户体验以简化开发,我建议将HTML5好东​​西(允许您在本地创建和下载文件)与JS压缩库(例如JSZip )结合使用,所以用户只需下载一个zip文件(并且只提示一次)。 顺便说一句,如果用户希望,他/她可以选择始终下载文件而无需提示(但您已经知道)。


    使用本地消息应用程序的想法。

    原生应用程序很麻烦,而且编写起来很痛苦,因为文档很差,除非您在两端都精确地获得JSON格式,否则将无法在控制台中看到任何内容,因为stdin和stdout会被接管。

    但是,当你完成这个任务时你会更高兴,因为你可以使用标准工具(例如,Windows资源管理器,十六进制编辑器,TeamViewer等)查看,移动和删除文件,或者查看正在发生的事情。 Chrome的沙盒文件系统可以工作,但似乎现在已经成了一个死胡同(没有其他浏览器已经选择了它)。 没有人会为它开发第三方工具。 当然,一旦一切正常,你可能不需要工具,但在那之前,调试是一场噩梦,因为你需要编写代码(以及相当多的代码)来跟踪哪些文件位于哪些目录,文件版本,剩余的磁盘空间...

    链接地址: http://www.djcxy.com/p/66581.html

    上一篇: How can a Chrome extension save many files to a user

    下一篇: How to run chrome extension in specific domain