Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展如何将许多文件保存到用户指定的目录中?_Javascript_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript Chrome扩展如何将许多文件保存到用户指定的目录中?

Javascript Chrome扩展如何将许多文件保存到用户指定的目录中?,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在开发一个Chrome扩展,用作内部工具。其要求的行为是: 作为页面操作,在查看某些intranet页面时启用地址栏图标 当用户单击图标时,在页面上标识特定媒体类型(例如,.jpg)的所有文件,然后 以静默方式将它们全部保存到用户本地驱动器上的目录中 ,但当时的答案是“及” 那么,目前实现这一目标的可行方式是什么?我看过的是: API---但这不会将文件保存在任何用户可访问的位置。相反,存储的文件位于未记录的目录中。用户要求文件以其原始名称存储在可访问的目录中 ,通过创建data:URL并

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

  • 作为页面操作,在查看某些intranet页面时启用地址栏图标
  • 当用户单击图标时,在页面上标识特定媒体类型(例如,.jpg)的所有文件,然后
  • 以静默方式将它们全部保存到用户本地驱动器上的目录中
  • ,但当时的答案是“及”

    那么,目前实现这一目标的可行方式是什么?我看过的是:

    • API---但这不会将文件保存在任何用户可访问的位置。相反,存储的文件位于未记录的目录中。用户要求文件以其原始名称存储在可访问的目录中
    • ,通过创建data:URL并以编程方式单击它。这会为每个文件弹出一个“另存为…”对话框,当单个页面上有100个资产时,这是不可接受的。用户要求下载文件时,除单击图标外,无需进一步交互
    • 但这仅在beta和dev频道中可用。用户需要使用主流Chrome进行此扩展
    • 通过创建一个简单地将文件保存到磁盘的小.exe来使用,然后将.jpg作为blob传递给它。这看起来非常麻烦,我甚至不知道如何可靠地将大的blob传递给像这样的前任

    还有别的方法我可以试试吗?

    恐怕你已经做了功课,这意味着你已经考虑了所有可能的选择

    实现您想要的最佳方式是(如您所述)使用支持的本机应用程序并通过本机消息传递进行通信。顺便说一句,由于带宽在内部网上很少是个问题,您可能会发现传递资源(如图像)URL并让应用程序下载并保存它们更简单。
    (是的,这比简单地开发一个扩展要麻烦得多,但是一个人必须做他们必须做的事情,对吗?)


    另一方面,如果您愿意牺牲一点用户体验来简化开发,我建议将HTML5的优点(允许您在本地创建和下载文件)与JS压缩库(例如,)相结合,这样用户只需下载一个zip文件(并且只需提示一次)。顺便说一句,如果用户愿意,他/她可以选择总是在没有提示的情况下下载文件(但你已经知道了)。

    你已经做了很多研究。事实上,没有任何插件或扩展,常规网页无法写入用户的文件系统。而且,正如您所观察到的,只提供对虚拟文件系统的访问

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

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


    关于:因为您的扩展是内部的,所以您可能可以强制用户进入beta/dev通道以使用此API。此API的唯一限制是文件将保存在用户定义的下载文件夹(的子目录)中


    编辑:
    chrome.downloads
    API现在可以在所有频道使用,包括stable分支(自chrome 31以来)。

    使用本机消息应用程序idea

    本机应用程序很麻烦,编写起来也很痛苦,因为文档很差,除非两端的JSON格式都完全正确,否则在控制台中看不到任何东西,因为stdin和stdout都被接管了


    但是,完成后您会更高兴,因为您可以使用标准工具(例如,Windows资源管理器、十六进制编辑器、TeamViewer…)查看、移动和删除文件,或者查看正在发生的事情。Chrome的沙盒文件系统可以正常工作,但现在似乎是一条死胡同(没有其他浏览器能找到它)。没有人可能会为此开发第三方工具。当然,一旦一切正常运行,您可能不需要工具,但在此之前,调试是一场噩梦,因为您需要编写代码(以及大量代码)来跟踪目录中的文件、文件版本、剩余磁盘空间……

    另一种内部(或非内部)解决方案用法是连接到websocket服务器,本地或远程

    您可以将其放在background.js或content.js中(对于
    https://
    ,使用
    wss://


    +1因为这个问题提到了Chrome扩展,我从来没有想过Chrome应用程序(尽管现在看起来很明显):)很好@RobW问题在于感知。人们听到“beta”,他们会想到“bug”,因此,无论何时遇到任何bug,他们都会认为这是由于处于beta状态,然后来找我。@Crashworks
    chrome.downloads
    API现在可以在chrome stable(31+)上下载。下面是一个更新的链接,指向chrome即将取消对chrome应用程序支持的示例。回到原点,该死。出于好奇,我们最终解决了这个问题,在我们的内部工具中完全放弃了Chrome和Web UI。这是一种解决方法D@Crashworks,而不是NPAPI,为什么不使用PPAPI?@Crashworks-你转向了什么?我们正在做类似的事情,在chrome中有很多工具。。。。“直接应用程序?”“EdWalm是的,我们回到QT中构建本地C++应用程序。请不要破坏您的帖子。一旦您发布了一个问题,您就已经将内容授权给了Stack Overflow社区(在CC by SA许可下)。如果你愿意
    var ws = new WebSocket('ws://echo.websocket.org');
    // var ws = new WebSocket('ws://127.0.0.1:9000');
    ws.onmessage = function(res) {
        console.log('received data:', res.data);
    };
    ws.onopen = function() {
        ws.send('hello');
    };