22

我试图弄清楚是否可以使用默认系统应用程序从 Progressive Web App 打开文件。

这个想法是 PWA 将存储一些文件以供离线使用(例如 .docx 文件),并且用户无需(重新)下载它们就可以打开它们。

理想的情况是 PWA 能够将文件加载到内存中,使其可供该文件类型的默认系统应用程序访问(例如,用于 .docx 文件的 Word),监视更改(即用户保存编辑),以及然后将其存储回 PWA 存储中。即使是只读解决方案也会很棒。

由于隐含了严重的安全问题,并且由于谷歌搜索没有出现任何内容,我最好的选择是(尚不)支持。但是,我希望可能有一种我不知道的方法来做到这一点,并且不需要用户下载文件的副本。

4

2 回答 2

23

由于这个问题最近引起了很多关注,对于任何对此主题感兴趣的人来说,有一个非常令人兴奋的消息:Writable Files API(现在称为文件系统访问 API)。

此时提议的新 API 仅处于设计阶段,关于引入它们的机会本身存在生动的讨论。所以看起来我们离生产就绪的解决方案还很远。

更新 2019-04-12

现在有一个解释器(也链接在上面提到的帖子中),其中包含很多关于提议的 API 将/应该如何工作的有用信息。

更新 2021-02-19

文件系统访问 API 仍在不断发展。在上一次更新中提到的解释器之上,MDN Web Docs 上还有一个草稿文档

更新 2021-10-14

了解更多关于文件系统访问 API 的一个很好的起点仍然是web.dev 上的这篇文章,它正在不断更新。

于 2018-12-21T15:46:28.090 回答
4

不,PWA 不能监听常规文件系统更改,除了沙盒到应用程序本身的文件(这就像每个安装的 PWA 的虚拟文件系统)

您可以在此处参考存储更改的唯一事件侦听器,这仅适用于您从 PWA 存储到您的 PWA 特定存储空间的内容,您的外部应用程序无法访问这些内容。

<input type="file">是您可以访问常规存储文件系统的唯一方法,它不会有任何监听器。

您所期待的是许多开发人员希望很快得到的东西,但不是一般的 PWA 规范形式。正如您所提到的,它主要被安全约束所阻止。想想我们在 Web 浏览器中访问的所有 PWA 网站(对于最终用户来说看起来就像一个普通的 Web)都可以访问您的完整文件系统。谁会接受并喜欢这个事实?没有人。一旦将 PWA 添加到主屏幕,它应该会演变为具有单独的权限,之后我们可以期待看到这些功能。

更新:您必须同时使用文件系统和 PWA 的唯一替代解决方案是将 PWA 包装在 Cordova 中,并使用本机文件系统 API 以及服务工作者等 PWA 功能来获得离线功能。如果您的目标用户 webview 足够新(v40+),它将支持服务人员。使用此选项,无法通过“添加到主屏幕”选项分发应用程序,如果这样做,它将不支持文件系统访问。

使用 Electron 包装您的 Web 应用程序可以是另一种替代方法,它也可以访问您的文件系统。Atom、VS Code 等 IDE 是使用 Electron 和 HTML/CSS/JS 构建的。

于 2018-06-06T15:42:00.847 回答