「渐进式 Web 应用 (PWA) 是使用 Web 技术生成的应用程序,可以从一个代码库安装并可在所有设备上运行。」1

PWA 技术好些年前就已经推出了,但在国内似乎一直未受到重视。 我最早注意到这项技术,是在 Chrome 浏览器的地址栏上发现突然多了个 Install 按钮,就安装体验了一下,比如 Github 和 Twitter 。 体验感受并不好,和 web 网页基本没差别,就是在系统桌面和任务栏多了个应用图标,还要额外打开一个窗口。 包括现在,我也认为 大部分网站在桌面操作系统上 PWA 化是没啥意义的

最近我写了个 epub 阅读器 , 我需要一个跨平台方案,可以直接读取本地文件:双击 .epub 文件,直接用 app 打开,就是关联为默认程序,而不是在 app 中打开文件。 我原本考虑是用 Electron ,代码都写好了,但对于一个工具类的小应用,用 Electron 构建总感觉有些偏重。 安装包近 100M ,需要编译不同平台的安装包,每次更新都要再次编译。 一次偶然的搜索发现,可以用 PWA 支持 关联本地 .epub 文件 ,这让我对 PWA 技术重新产生了兴趣。

实现代码非常简单,添加一个 manifest.json 文件,然后在项目中加入代码:

1
2
3
4
5
6
7
8
if ('launchQueue' in window) {
  console.log('File Handling API is supported!')
  window.launchQueue.setConsumer((launchParams: LaunchParams) => {
    handleFiles(launchParams.files)
  })
} else {
  console.error('File Handling API is not supported!')
}

具体实现细节就不多说了,可以查阅文档 2

技术实现不难,只是有时候我们不知道还有更简单高效的解决方案。

当我用 PWA 创建了本地跨平台应用,这感觉太爽了, 省去了一堆 Electron 依赖 ,不用在系统层面的 api 上耗费精力,专注于应用层的开发,效率提升了许多。 从用户角度考虑, PWA 应用, 安装快捷,不占用空间,卸载方便,打开迅速,app 更新也不需要安装包 ,体验非常轻松。

另外:

  • PWA 应用支持 离线使用 ;
  • PWA 应用可以上传到 Windows Store 或 Chrome App Store 。(可惜我暂时没账号,就先不上传了)

示例

EvoReader (https://evoreader.github.io/) 是一个轻量的跨平台 epub 阅读器, 可以用它浏览本地的 .epub 文件。不了解 PWA 安装的,可以查阅 安装指南

如果你对这个项目感兴趣,欢迎点一下 https://github.com/EvoReader/EvoReader 上的小星星,有任何建议或 Bug ,欢迎向我反馈!

Install EvoReader

open .epub file on Mac