背景

有时候,我们也希望VuePress构建的文档中心能支持离线访问,这时候我们需要给他添加渐进式Web应用(PWA,Progressive Web App)的支持,根据官方文档指引,我们可以借助插件vuepress/plugin-pwa来添加PWA的支持。

PWA(Progressive Web Apps,渐进式 Web 应用)运用现代的 Web API 以及传统的渐进式增强策略来创建跨平台 Web 应用程序。这些应用无处不在、功能丰富,使其具有与原生应用相同的用户体验优势。

安装

npm install @vuepress/plugin-pwa

项目地址:https://v2.vuepress.vuejs.org/zh/reference/plugin/pwa.html

该插件使用workbox-build来生成Service Worker文件,并通过register-service-worker来注册Service Worker

配置

建立应用程序清单(Web App Manifest)

Web应用程序清单在一个JSON文本文件中提供有关应用程序的信息(如名称,作者,图标和描述)。manifest的目的是将Web应用程序安装到设备的主屏幕,为用户提供更快的访问和更丰富的体验。

Web应用程序清单是被称为渐进式Web应用程序(PWA)的Web技术集合的一部分, 它们是可以安装到设备的主屏幕的网络应用程序,而不需要用户通过应用商店,伴随着其他功能, 比如离线可用和接收推送通知。

我们前往.vuepress\public目录找一个位置建立一个manifest.webmanifest文件,这里我建在assets\config目录下,而且约定都对应的图标文件放在assets\img目录下。

{
"name": "xxxxxxxxxxxxxxxxx",
"short_name": "xxxxxxxxxxxxxx",
"icons": [
{
"src": "/assets/img/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/assets/img/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"start_url": "/index.html",
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

有人问,图标从哪来,上Favicon Generator或者imageGenerator生成一组吧。

使用应用程序清单(Web App Manifest)

前往.vuepress目录,编辑config.js文件,设置插件plugins配置。

plugins: [
['@vuepress/pwa', {
skipWaiting: true,
serviceWorkerFilename: 'service-worker.js'
}]
]

这里设置skipWaiting: true意味着在新的Service Worker就绪之后,会立即激活它。

这里我还多指定了一个serviceWorkerFilename,默认值就是service-worker.js,如果你要改也是可以的,用于指定生成的Service Worker文件路径。

如果是IIS部署,还需要添加新的MIME类型

.webmanifest
application/json

这样,访问/assets/config/manifest.webmanifest才可以正常。

效果

之前的效果

之后的效果

拥有PWA支持的网站会多一个按钮。

点击这个按钮,会弹出引导安装这个PWA应用的提示。

安装之后,会先直接运行一次,惊艳,它就像一个原生的应用那样。

只是在右侧顶部这里,会比其他的非PWA多三个点的菜单。

关于PWA的HTTPS限制

如果你是Localhost或者127.0.0.1的模式访问是不限制的,但是如果你走域名,你会发现,PWA不生效,原因在于:

PWA只能在HTTPS协议下使用。

这里如果部署容器是IIS,可以走https://certifytheweb.com 这个工具弄一下。

先新建一个联系人,就是给一个邮件地址,如果证书过期了会邮件通知你。

新建证书,选择IIS站点,下拉选择之后,会读到这个站点绑定的域名。

点击请求证书。

正在申请证书。

申请成功。

这时候,再用HTTPS请求网站,你就发现,已经是有证书了,是不是很赞。

参考

试着给VuePress添加渐进式Web应用(PWA)支持,基于vuepress/plugin-pwa,点亮离线访问的更多相关文章

  1. 试着给VuePress添加全局禁止爬取支持,基于vuepress-plugin-robots

    背景 有时候,我们有些内部网站希望不被外部抓取,那么我们可以借助vuepress-plugin-robots来生成robots.txt文件,来告诉爬虫不要抓取页面. 安装 npm install vu ...

  2. 渐进式Web应用(PWA)入门教程(上)

    最近关于渐进式Web应用有好多讨论,有一些人还在质疑渐进式Web应用是否就是移动端未来. 但在这篇文章中我并不会将渐进式APP和原生的APP进行比较,但有一点是可以肯定的,这两种APP的目标都是使用户 ...

  3. 渐进式web应用开发---service worker 原理及介绍(一)

    渐进式web应用(progressive Web app) 是现代web应用的一种新形式.它利用了最新的web功能,结合了原生移动应用的独特特性与web的优点,为用户带来了新的体验. 一:传统web端 ...

  4. 基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]

    基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1] 原文:基于Vue JS, Webpack 以及Material Design的渐进式web应 ...

  5. 渐进式Web应用(PWA)

    什么是渐进式Web应用? 渐进式Web应用是一种全新的Web技术,让Web应用和原生APP的体验相近或一致. 渐进式Web应用它可以横跨Web技术及Native APP开发的解决方案,对于开发者的优势 ...

  6. 创建一个离线优先,数据驱动的渐进式 Web 应用程序

    原文地址:Build an offline-first, data-driven PWA 译文出自:我的个人博客 概述 在本文中,您将学习如何使用 Workbox 和 IndexedDB 创建离线优先 ...

  7. Google_PWA_ServiceWork_渐进式 Web 应用_给应用提供离线体验

    前言:今天结识了google PWA提供的一个对移动端Web应用提供离线体验的一个功能,感觉很有用.我这里不分享自己的写法和代码.官网文档说的很详细,直接粘过来大家看吧. 推荐官网地址:你的第一个渐进 ...

  8. 关于渐进式 Web 应用,你应该知道的一切

    渐进式 Web 应用是利用现代浏览器的特性,可以添加到主屏幕上,表现得像原生应用程序一样的 Web 应用程序. 什么是渐进式 Web 应用 渐进式 Web 应用(PWA)本质上与普通的网站没有什么不同 ...

  9. 使用 React.js 的渐进式 Web 应用程序:第 1 部分 - 介绍

      使用 React.js 的渐进式 Web 应用程序:第 1 部分 - 介绍 使用 React.js 的渐进式 Web 应用程序:第 1 部分 - 介绍 来自译者 markzhai:大家也知道最近 ...

随机推荐

  1. 用JIRA管理你的项目——(一)JIRA环境搭建

    JIRA,大家应该都已经不陌生了! 最初接触这个工具的时候,我还在一味地单纯依靠SVN管理代码,幻想着SVN可以有个邮件通知,至少在项目成员进行代码修改的时候,我可以第一时间通过邮件获得这个消息! 当 ...

  2. python上下文管理协议,即with的详细使用

    一.with obj as f: #代码块... 二.执行流程: 1.with obj --->触发obj.__enter__(),需要在obj里写__enter__(self),在它里边写返回 ...

  3. 攻防世界(五)Web_php_include

    攻防世界系列:Web_php_include 方法一:大小写绕过 strstr()函数对php我协议进行了过滤,但我们可以尝试大小写绕过 抓包POST传值让其执行我们输入的命令 ?page=Php:/ ...

  4. VFB FEEDBACK

  5. [论文阅读笔记] Community aware random walk for network embedding

    [论文阅读笔记] Community aware random walk for network embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 先前许多算法都 ...

  6. scrapy奇技淫巧1

    Request传递值到callback回调函数 def parse(self, response): request = scrapy.Request('http://www.example.com/ ...

  7. WPF中Grid容器中VerticalAlignment和HorizonAlignment和Margin的关系。

    在WPF中,经常使用Grid容器,来布局我们想要显示的对象. 这就不可避免的要和布局在其中的控件的VerticalAlignment特性,HorizonAlignment特性,以及Magin特性打交道 ...

  8. pytorch生成对抗示例

    pytorch生成对抗示例 本文对ML(机器学习)模型的安全漏洞的认识,并将深入了解对抗性机器学习的热门话题.图像添加难以察觉的扰动会导致模型性能大不相同.通过图像分类器上的示例探讨该主题.使用第一种 ...

  9. MindSpore图像分类模型支持(Lite)

    MindSpore图像分类模型支持(Lite) 图像分类介绍 图像分类模型可以预测图片中出现哪些物体,识别出图片中出现物体列表及其概率. 比如下图经过模型推理的分类结果为下表: 类别 概率 plant ...

  10. ubuntu虚拟机安装ssh教程

    大家好,这期给大家带来一期Ubuntu虚拟机中ssh的安装教程,话不多说,开整 第一步:输入su后输入密码进入root权限 第二步:在管理员模式下运行apt-get install openssh-s ...