【问题标题】:Open file with system application in a Progressive Web App在渐进式 Web 应用程序中使用系统应用程序打开文件
【发布时间】:2018-11-15 22:30:36
【问题描述】:

我正在尝试确定是否可以使用默认系统应用程序从 Progressive Web App 打开文件。

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

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

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

【问题讨论】:

    标签: javascript file read-write pwa


    【解决方案1】:

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

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

    2019 年 4 月 12 日更新

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

    2021 年 2 月 19 日更新

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

    2021 年 10 月 14 日更新

    了解更多关于文件系统访问 API 的一个很好的起点仍然是this post on web.dev,它会不断更新。

    【讨论】:

    • 如果我们需要列出文件(不显示文件选择器)怎么办?喜欢列出用户的音频文件。
    • 根据当前的实现,您需要显示一个文件夹选择器,因为您需要获得明确的用户同意才能这样做。文件夹选择器只有在用户输入后才能打开(例如:单击按钮),并且必须在每次加载 pwa 时获取。但是,您可以存储对文件夹的引用,因此下次用户打开 pwa 时,您不需要显示文件夹选择器,而只会弹出 gran 权限
    【解决方案2】:

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

    您可以参考only event listener for storage change here,这仅适用于您从 PWA 存储到您的 PWA 特定存储空间的内容,您的外部应用程序无法访问该存储空间。

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

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

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

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

    【讨论】:

    • 感谢您对听力部分的澄清。您是否知道是否支持打开由 PWA 存储的文件(即 PWA 打开已存储在其存储文件系统中的文件)?如前所述,即使在只读模式下对我的目的也有好处
    • 你的问题不清楚。如果你想在 PWA 中打开一个文件,它也是由 PWA 创建的,这是可能的。如果您想在其他应用程序(如 word)中打开相同的文件,我怀疑.. 可能取决于操作系统。我相信可能是我。 android 但不是在 iOS 中。即使您在 Android 中找到了偷偷摸摸的路径并找到了打开它的方法,也可能不是您的用户愿意做的事情。换行
    • @ghego1 检查答案中的更新。如果您同时需要 PWA 和文件系统访问权限,那是您目前唯一的选择。
    • 感谢您提供更多信息,但我正在研究 PWA,以避免像 Cordova 和 Electron 这样的应用包装器。
    • 我知道 PWA 是这里的首选。但给出了其他两个选项,因为没有可用的纯 PWA 解决方案。我也不明白你的意思,因为这似乎与你最初问的不同。 “ PWA 打开一个已存储在其存储文件系统中的文件”。无论如何,没有用于直接文件系统访问和监控的 PWA 解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2023-03-07
    • 2016-08-17
    • 1970-01-01
    • 2017-04-27
    相关资源
    最近更新 更多