PWA初体验

一:什么是PWA

  • PWA( 全称:Progressive Web App )也就是说这是个渐进式的网页应用程序。它主要有三个技术:
    • Service Worker( ps:就叫做中间服务商 )
    • Manifest (应用清单,网页应用程序的图标、是否全屏,启动动画等配置文件)
    • Push Notification(网页应用程序的推送通知)

二:Service Worker和Manifest示例代码

Image text

  • 一个小demo

    • 代码结构
      • 1、index.hml
      • 2、main.css
      • 3、main1.css
      • 4、swa.js
      • 5、sw-toolbox.js,eat.png 用于缓存的文件
      • 6、manifest.json 应用清单
  • index.hml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>hello PWA</title>
    <meta name="viewport" content="width=device-width,user-scalable=no">
    <link rel="stylesheet" href="main.css" type="text/css" >
    <link rel="manifest" href="manifest.json">
    </head>
    <body>
    <h3>hello PWA</h3>

    <p>new text</p>
    </body>
    <script>

    //检查当前浏览器是否支持 Service Workers
    if ('serviceWorker' in navigator) { //如果支持,注册一个叫做 'sw.js' 的 Service Worker 文件
    // 注册 service worker
    navigator.serviceWorker.register('swa.js').then(
    function(registration) {
    // 注册成功
    console.log('ServiceWorker registration successful with scope: ', registration.scope);
    }).catch(function(err) {
    // 注册失败 :(
    console.log('ServiceWorker registration failed: ', err);
    });
    }
    </script>

    </html>
    • 2、main.css

      1
      h3{color:#f00;}
    • 3、main1.css

      1
      h3{color:blue;}
    • 4、swa.js

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      //缓存文件
      var cacheName = 'helloWorld';
      self.addEventListener('install', function (event) {
      event.waitUntil(
      caches.open(cacheName)
      .then(function (cache) {
      cache.addAll([
      'sw-toolbox.js',
      'eat.png'
      ]).then(function (data) {
      console.log('缓存成功',data)
      })
      }
      ))
      });

      //中间商对请求进行拦截
      self.addEventListener('fetch', function (event) {
      if (/\.css$/.test(event.request.url)) {
      event.respondWith(fetch('/main1.css'))

      }
      });
    • 5、manifest.json

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      {
      "name":"Li PWA",
      "short_name":"Li PWA",
      "display":"standalone",

      "background_color":"#aaaaff",
      "icons":[{
      "src":"eat.png",
      "sizes":"120x120",
      "type":"image/png"
      }]
      }

三:发布网站,运行网站

我使用的IIS发布
  • 缓存文件sw-toolbox.js和eat.png

Image text

  • 中间商拦截修改页面字体颜色,从红色改为蓝色

Image text

四:使用ngrok映射到外网

ngrok使用教程
https://hongmaju.github.io/2018/05/13/ngrok%E5%B0%86%E6%9C%AC%E5%9C%B0Web%E6%9C%8D%E5%8A%A1%E6%98%A0%E5%B0%84%E5%88%B0%E5%A4%96%E7%BD%91/#more

五:手机浏览器打开映射后的HTTPS地址,添加到主屏幕

Image text
Image text

六:一些解释

  • Service Worker的安装和触发
    • 安装的代码再index.html中
    • 触发的代码再swa.js中

Image text

坚持原创技术分享,您的支持将鼓励我继续创作!
------ 本文结束 ------

版权声明

hongmaju's Notes by hongmaju is licensed under a Creative Commons BY-NC-ND 4.0 International License .
hongmaju 创作并维护的 hongmaju's Notes 博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证
本文首发于hongmaju's Notes 博客( https://hongmaju.github.io/ ),版权所有,侵权必究。