深入学习网址:https://developer.mozilla.org/zh-CN/docs/Web/Progressive_web_apps

谷歌官方网址:https://codelabs.developers.google.com/codelabs/your-first-pwapp/index.html?index=..%2F..index#0

一. 基本介绍

1. 渐进式:适用所有浏览器,因为它是以渐进式增强作为宗旨开发的,不支持的浏览器不影响

2. 流畅:能够借助service worker在离线或者网络较差的情况下正常访问

3. 可安装:用户可以添加常用的webapp到桌面,免去去应用商店下载的麻烦

4. 原生体验:可以和app一样,拥有首屏加载动画,可以隐藏地址栏等沉浸式体验

5. 粘性:通过推送离线通知等,可以让用户回流

二. Web app manifest(应用程序清单)

1. 需要index.html引入manifest.json文件

2. 例:<link rel=”manifest” href=””manifest.json” />

3. 注意:需要在https协议或者http://localhost下访问才能正常使用

4. 配置完成就可以添加到桌面了

 注意:安卓手机要开chrome权限才能添加成功,自测:华为手机有个权限是(添加桌面快捷方式)要打开才能添加成功

三. 谷歌调试(可以在模拟机打开localhost网页)

1. 电脑打开chrome - 更多工具 - 开发者工具 - More tools - remote

四. 使用http-server开启一个本地服务器

1. 下载node.js

2. 在终端输入:

npm install http-server -g

3. 开启 http-server服务

4. 终端进入目标文件夹,然后在终端输入:

http-server -c-1   (⚠️只输入http-server的话,更新了代码后,页面不会同步更新)

五. Web work

六. Server worker(持久离线缓存) (实现预缓存和网页离线浏览,在有网络的时候进行缓存无网络就可以浏览了)

什么是预缓存?

服务人员的一项功能是在服务人员安装时将一组文件保存到缓存的功能。这通常称为“预缓存”,因为您是在使用服务工作者之前缓存内容。

1. 进行操作缓存和网络请求

2. event.waitUntil用于生命周期顺序执行

三个监听对应事件应该做的事情

注意:存储html要存储/不能是/index.html不然访问缓存请求/就会找不到

七. CacheStorage

八. Promise

1. 一个方法的调用可能出现成功或者失败,比如创建文件

2. 其中的then方法是传入回调成功或失败处理

3. Catch其实就是then(null, fail)then方法只处理回调失败方法

九. Manifest的scope

1. 类似于跨域这种东西

2. 设置了scope的server-worker的作用范围只能在此路径或子路径

3. Server-worker加载的js文件也限制了范围只能在js文件路径或子路径

4. 用来设置manifest对于网站的作用范围,scope的作用范围及对start_url的影响:所以配置的start_url只能在server-worker的作用范围下才有效果

十. Pwa安装确定按钮回调

注意:要想添加pwa到桌面成功必须先翻墙

Window 对象的 onappinstalled 属性用于处理 appinstalled  事件,该事件是一个实现了 Event接口的简单事件,会在网页应用成功安装为渐进式网页应用时立即触发。

例子:window.onappinstalled = function(ev) { 
  console.log('The application was installed.');};

十一. 拦截谷歌初始化pwa后自动弹窗事件

1. 如果已安装该应用程序,则不会触发beforeinstallevent事件

2. 可以在beforeinstallevent里拿到pwa事件,发现如果没有用户交互监听不到:如:用户需要点击屏幕就能触发此事件

3. 保存的事件只能调用prompt()一次延迟事件。如果用户将pwa弹窗关闭,则需要等到beforeinstallprompt事件再次触发(通常是在userChoice属性解析后立即触发)。

十二.  检测您的应用是否从主屏幕启动

js 层判断:

if (window.matchMedia('(display-mode: standalone)').matches) {
console.log('display-mode 是 standalone');
}

css 层判断:

@media all and (display-mode: standalone) {
/** 自定义样式 **/
}

  

Safari 判断:

if (window.navigator.standalone === true) {
console.log('display-mode 是 standalone');
}

PWA 学习笔记的更多相关文章

  1. PWA 学习笔记(一)

    PWA 介绍 概念: PWA(Progressive web apps,渐进式 Web 应用)运用现代 Web API 和传统的渐进式增强策略来创建跨平台 Web 应用程序 它并不是一个快捷方式,而能 ...

  2. pwa学习笔记--简介

    1. 介绍 Progressive Web App , (渐进式增强 WEB 应用) 简称 PWA ,是提升WebApp的体验的一种新方法,能给用户原生应用的体验. PWA 本质上是 Web App ...

  3. PWA 学习笔记(四)

    Service Worker 简介: 1.Service Worker 是 PWA 技术基础之一,脱离浏览器主线程的特性,使得 Web App 离线缓存成为可能, 更为后台同步.通知推送等功能提供了思 ...

  4. PWA 学习笔记(五)

    离线与缓存 资源请求的拦截代理: 1.资源请求的判断: (1)fetch 事件会拦截页面上所有的网络资源请求,但我们通常只对部分资源请求进行处理, 其余的请求会继续走浏览器默认的资源请求流程 (2)f ...

  5. PWA 学习笔记(三)

    基础技术简介 Promise: 1.ES6 引入的一种异步编程的解决方案,通过 Promise 对象来提供统一的异步状态管理方法 2.一般在使用 Promise 对象的时候,首先需要对其进行实例化 3 ...

  6. PWA学习笔记(二)

    设计与体验 APP Shell: 1.应用从显示内容上可粗略划分为内容部分和外壳部分,App Shell 就是外壳部分,即页面的基本结构 2.它不仅包括用户能看到的页面框架部分,还包括用户看不到的代码 ...

  7. Vue学习笔记-Vue.js-2.X 学习(四)===>脚手架Vue-CLI(基本工作和创建)

    (五) 脚手架Vue-CLI 一 Vue-CLI前提(nodejs和webpack) 二  Vue学习-nodejs按装配置,Node.js 就是运行在服务端的 JavaScript. 1. 去nod ...

  8. 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战

    前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...

  9. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. Eclipse常用快捷键【转】

    Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键.1. [ALT+/]此快捷键为用户编辑的好帮手,能为用户提供内容的 ...

  2. 【智能合约】编写复杂业务场景下的智能合约——可升级的智能合约设计模式(附Demo)

    智能合约的现状 以太坊在区块链上实现了智能合约的概念,用于:同质化通证发行(ERC-20).众筹.投票.存证取证等等,共同点是:合约逻辑简单,只是业务流程中的关键节点,而非整个业务流程.而智能合约想解 ...

  3. xlwings excel(四)

    前言 当年看<别怕,Excel VBA其实很简单>相见恨晚,看了第一版电子版之后,买了纸质版,然后将其送人.而后,发现出了第二版,买之收藏.之后,发现Python这一编程语言,简直是逆天, ...

  4. Kivy 自定义控件之(一)

    lableSlider1.kv文件 <LabelSlider>: orientation:'vertical' BoxLayout: MyLabelSlider: name: 'Slide ...

  5. 【学习笔记】Linux基础(一):磁盘分区与Linux的安装(以CentOS为例)

    一.磁盘分区与Linux的安装(以CentOS为例) 0.说在安装之前 在Linux中,"一切设备皆文件",设备在/dev这个目录下 /dev/sd[a-p] 表示SCSI/SAT ...

  6. MySQL5.7 中的query_cache_size

    摘自:http://jackyrong.iteye.com/blog/2173523 1 原理    MySQL查询缓存保存查询返回的完整结果.当查询命中该缓存,会立刻返回结果,跳过了解析,优化和执行 ...

  7. http://i.youku.com/u/UMzQ3NjQ0MDAw C语言教学 觅风

    http://i.youku.com/u/UMzQ3NjQ0MDAw C语言教学 觅风

  8. linux --- 杀掉特定端口进程与启用SSH服务

    Linux下端口被占用解决 有时候关闭软件后,后台进程死掉,导致端口被占用.下面以JBoss端口8083被占用为例,列出详细解决过程. 解决方法: 1.查找被占用的端口 netstat -tln ne ...

  9. webpack入门系列1

    一.什么是webpack?为什么要使用它? Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 为什么我们要使用它呢?因 ...

  10. 消息中间件面试题31道RabbitMQ+ActiveMQ+Kafka

    消息中间件面试题31道RabbitMQ+ActiveMQ+Kafka 前言 文章开始前,我们先了解一下什么是消息中间件? 什么是中间件? 非底层操作系统软件,非业务应用软件,不是直接给最终用户使用的, ...