从 Chrome 应用程序过渡
警告
重要提示:Chrome 将在所有平台上取消对 Chrome 应用程序的支持。 Chrome 浏览器和 Chrome 网上应用店将继续支持扩展程序。阅读公告并了解有关迁移应用程序的更多信息。
要从 Chrome 打包或托管的应用程序过渡,可以使用以下选项。
# Chrome 打包应用(Chrome packaged apps)
打包应用程序的推荐迁移选项按从最简单到最复杂的顺序列出。
# 构建渐进式 Web 应用程序
构建渐进式 Web 应用程序 (PWA) 是跨所有操作系统覆盖用户的理想方式。
作为我们的 Web Capabilities(代号:Fugu)工作的一部分,我们正在研究为依赖独家 Chrome 应用程序 API(特别是套接字、HID、文件系统和串行 API)的开发人员改进 Web 迁移路径的方法。如果您需要的网络平台功能仅在部分浏览器中可用,当您的应用在不支持特定 API 的浏览器中运行时,您可以使用功能检测来优雅地降级或包含解释性文本。如果您的应用程序的网络平台存在空白,请告诉我们。
PWA 可安装在桌面和移动平台上。选择安装 PWA 的用户可以通过图标和快捷方式启动它,类似于今天安装 Chrome 应用程序的方式。
# 构建扩展增强型网页
如果您的 Chrome 应用程序具有常规网络平台无法提供的功能,则可以将其作为扩展 API 使用。在这种情况下,您将渐进式 Web 应用程序与您的 Web 应用程序可以向其发送消息的外部可连接扩展一起使用。构建 Web 应用程序通常比这更可取,因为这种方法会强制用户安装仅在您的站点上有用的扩展程序,并且可能会增加摩擦。
由于 Chrome 扩展程序无法在其他浏览器上运行,您应该检测所需功能何时不可用,并为这些其他浏览器上的用户提供解释性文本。
# 构建扩展
根据您想要提供的用户体验,将整个应用程序转换为扩展程序可能是有意义的。例如,您可以提供一个浏览器操作(browerAction)按钮,为您的用户界面显示一个小的弹出窗口,或者导航到您的扩展程序提供的页面。对于某些应用程序,这可能是一个足够好的用户体验,可以成为一个可行的解决方案。
请注意,这种方法的成本很高。虽然某些浏览器支持与 Chrome 相同的扩展 API,但这种支持并不普遍。对于更喜欢跨浏览器替代方案的用户来说,这可能会产生重大摩擦。
# 通过 Android 为 Chrome OS 构建
如果您是对为 Chrome OS 构建感兴趣的 Android 开发人员,您可以优化您的 Android 应用程序以获得更好的体验。
Chrome 应用 API/功能迁移建议(截至 2019 年 11 月):
# FAQs
# 问:如果 Chrome 应用迁移建议不符合我的用例要求怎么办?
我们希望得到您的反馈!请尽可能详细地填写此表格。
# 问:我的 Chrome 应用程序有很多用户。将它们迁移到我的新网络应用程序并弃用我的 Chrome 应用程序的最佳方法是什么?
在移除运行时之前,您仍然可以向 Chrome 应用程序发布更新。我们建议更新您的应用程序以包含一条消息,表明您的应用程序已停止使用,并且用户应该继续访问您的网站(请参见下面的示例)。您还可以包含一个调用 uninstallSelf() 方法的“卸载”按钮。
从 Chrome 75 开始,可以在 Chrome 应用程序内部使用 installReplacementWebApp() 方法,响应按钮单击或其他用户手势,自动触发替换 PWA 的安装流程。
# 问:我希望继续拥有 UI 可供性,使用户能够从任务栏/程序坞/主屏幕(taskbar/dock/homescreen)启动我的应用程序。我该怎么办?
Progressive Web Apps 可安装在桌面和移动平台上。选择安装 PWA 的用户可以通过图标和快捷方式启动它,类似于今天安装 Chrome 应用程序的方式。
# 问:我希望我的应用程序在自己的窗口中运行,而不是在选项卡中运行。这是我可以用网络应用程序做的事情吗?
您可以在 Progressive Web Apps 的清单文件中提供元数据,表明在安装后启动时,它将在自己的窗口中打开。
# 问:我的应用程序支持键盘快捷键。网络也可以支持吗?
Web 应用程序可以通过侦听各种按键事件(例如 keydown)来支持键盘快捷键,但您可以支持的快捷键是有限的。例如,您不能拦截 Ctrl+N、Ctrl+T 等,因为这些是浏览器使用的。或者,这些可能是由操作系统处理的快捷方式(例如 Windows 上的 Alt+Tab)。
当您的 Web 应用程序在全屏模式下使用时,您可以拦截这些系统快捷方式。
扩展命令 API 支持更丰富的键盘快捷键,可在整个浏览器中运行,如果可以转换到扩展,则可以启用新功能。
# 问:我的应用需要在用户离线时运行。我可以用网络应用程序做到这一点吗?
是的,您可以使用 Service Worker 使您的站点离线运行。 Workbox 项目可以简化为 Service Worker 开发功能齐全的缓存策略。
# 问:我的应用程序使用 chrome.gcm API 从云端接收推送消息。开放的网络能做到吗?
是的,假设用户已授予权限,Push API 和 Notifications API 可以允许您的 Web 应用程序显示您的用户推送通知。
# 问:我的应用程序需要能够向用户显示通知,即使它没有打开任何窗口。我可以用开放的网络做到这一点吗?
是的,只要浏览器实例正在运行,Push API 和 Notifications API 就可以让您的 Web 应用程序显示您的用户推送通知,即使您的 Web 应用程序关闭时也是如此。
# 问:我的应用程序使用 chrome.bluetooth/chrome.usb 与蓝牙/USB 设备通话。这可以在开放网络上完成吗?
Web 蓝牙和 Web USB 在某些浏览器中可用,并且可以在渐进式 Web 应用程序中使用(与功能检测一起)。
# 问:我的应用程序使用 chrome.fileSystem API 来读取和写入用户指定的文件和/或目录。这可以在开放网络上完成吗?
开放式 Web 可以读取用户打开的单个文件,但不能保留对这些文件的访问、写入这些文件或对目录具有任何访问权限。
有计划实现直接文件系统访问,并且 Chrome 中提供了一个实验性实现,但该功能尚未完全标准化。
# 问:我的应用程序使用 chrome sockets API 进行网络连接。这可以通过开放网络完成吗?
您也许可以使用 WebSockets 执行所需的操作。但是,要使用它,您可能需要更改连接的远程端。
如果这是不可能的,我们希望了解更多有关您的用例的信息 - 请让我们知道您通过 Chromium 问题跟踪器尝试完成的工作。
# 问:有哪些资源可用于帮助进行渐进式 Web 应用程序迁移?
Chrome 团队维护以下站点和工具,其中包含可在迁移过程中提供帮助的信息:
- Web 功能概述
- 渐进式 Web 应用程序培训
- Workbox,用于生成服务工作者(service worker)
如果您有未通过这些资源解决的特定问题,我们建议您在 Stack Overflow 上提问。此模板可用于创建标记有 google-chrome-app 和Progressive-web-apps 的问题,以确保最大程度的可见性。
# 问:我想使用尚未提及但缺乏网络替代方案的功能。如何提出功能请求?
我们希望更多地了解您想要完成的工作——通过 Chromium 问题跟踪器告诉我们。
# Chrome 托管的应用程序
# FAQs
# 问:我的托管应用程序使用通知权限。我如何在网络上做到这一点?
是的,假设用户已授予权限,Push API 和 Notifications API 可以允许您的 Web 应用程序显示您的用户推送通知。
# 问:我的托管应用程序使用了无限存储权限。我如何在网络上做到这一点?
无限存储权限确保您存储的数据是“持久的”,这意味着它只能由用户手动清除。推荐的替代方法是在您的 Web 应用程序中请求持久存储权限。
# 问:我的托管应用程序使用地理定位权限。我如何在网络上做到这一点?
Geolocation API 可用于 Web 应用程序以定位用户的位置。
# 问:我的托管应用程序使用后台权限。我如何在网络上做到这一点?
为了确保最小的功耗,我们一直小心翼翼地引入了一种通用方法,让站点在用户设备的后台运行。部署了 Service Worker 的站点可以确保用户在离线时采取的操作使用后台同步 API 同步到服务器。此 API 允许站点在设备重新连接到 Internet 时在后台运行一些有限的代码,即使该选项卡已关闭。请注意,此 API 不允许定期唤醒服务工作者(service worker)。
Chrome 中正在实施一项单独的功能,即定期后台同步,作为一项实验性功能。它允许开发人员通过在 Service Worker 上公开的特殊事件请求定期更新,并控制这些更新的频率。
# 问:我的托管应用程序使用 clipboardRead 和/或 clipboardWrite 权限。我如何在网络上做到这一点?
Web 应用程序可以使用标准平台 API 以编程方式复制和粘贴文本和图像。
By.一粒技术服务