don*_*don 7 javascript file read-write pwa
我试图找出是否可以使用默认系统应用程序从Progressive Web App中打开文件。
这个想法是PWA将存储一些文件供脱机使用(例如.docx文件),并且用户可以打开它们而无需(重新)下载它们。
理想的情况是PWA能够将文件加载到内存中,使该文件类型的默认系统应用程序可以访问该文件(例如,Word for .docx文件),监视更改(即用户保存编辑),以及然后将其存储回PWA存储中。即使是只读的解决方案也将很棒。
由于隐含着严重的安全问题,并且由于从Google搜索中未发现任何问题,因此,我最好的选择是尚不支持此操作。但是,我希望可能有一种我不知道的方法,并且该方法不需要用户下载文件的副本。
由于这个问题最近引起了广泛的关注,对于对此主题感兴趣的任何人,都有非常明显的消息:Writable Files API。
目前,提议的新API尚处于设计阶段,并且就引入它们本身的机会进行了生动的讨论。因此,看来我们离生产就绪解决方案还很遥远。
更新2019-04-12
现在有一个解释器(在上面提到的帖子中也链接了),其中包含许多有关建议的API如何/应该如何工作的有用信息。
不,PWA 无法侦听常规文件系统更改,除了沙箱到应用程序本身的文件(这就像每个安装的 PWA 的虚拟文件系统)
您可以在此处参考存储更改的唯一事件侦听器,该事件侦听器仅适用于您从 PWA 存储到 PWA 特定存储空间的内容,您的外部应用程序无法访问该存储空间。
<input type="file">这是访问常规存储文件系统的唯一方法,该系统没有任何监听器。
您所期待的是许多开发人员希望尽快获得的东西,但不是一般的 PWA 规范形式。正如您所提到的,它主要受到安全约束的阻止。想想我们在网络浏览器中访问的所有 PWA 网站(对最终用户来说看起来像普通的网络)都可以访问您的完整文件系统......谁会接受并喜欢这个事实?没有人。一旦添加到主屏幕,PWA 应该发展为具有单独的权限,之后我们可以期待看到这些功能。
更新:您必须同时使用文件系统和 PWA 的唯一替代解决方案是将 PWA 包装在 Cordova 中,并使用本机文件系统 API 以及 PWA 功能(例如 Service Worker )以实现离线功能。如果您的目标用户 webview 足够新(v40+),它将支持服务工作者。使用此选项,无法通过“添加到主屏幕”选项分发应用程序,如果这样做,它将不支持文件系统访问。
使用 Electron 来包装你的网络应用程序可以是另一种替代方案,它也可以访问你的文件系统。Atom、VS Code 等 IDE 是使用 Electron 和 HTML/CSS/JS 构建的。