找回密码
 立即注册

QQ登录

只需一步,快速开始

dexteryao 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-30 10:50  /   查看:2333  /  回复:0
前面介绍了PWA技术,那通过示例看看PWA如何让一个站点变成APP吧

准备工作,下载SpreadJS在线表格编辑器示例,在页面点击立即试用即可下载:https://www.grapecity.com.cn/developer/spreadjs
让SpreadJS在线表格编辑器支持PWA只需要实现App Manifest 和 Service Worker

1. 添加 manifest.json 文件
新建manifest.json,并在index.html中引用
  1. {
  2.   "name": "SpreadJSDesigner",
  3.   "short_name": "SJSD",
  4.   "descriptions": "SpreadJS在线表格编辑器",
  5.   "start_url": "./",
  6.   "background_color": "#fff",
  7.   "display": "minimal-ui",
  8.   "scope": "./",
  9.   "theme_color": "#fff",
  10.   "icons": [
  11.     {
  12.       "src": "./welcome.png",
  13.       "type": "image/png",
  14.       "sizes": "200x200",
  15.       "purpose": "any"
  16.     }
  17.   ]
  18. }
复制代码
  1. <link rel="manifest" href="./manifest.json">
复制代码


2. 实现Service Worker
新建sw.js, 通过Service Worker缓存设计器所需要的spreadjs资源
  1. var cacheName = 'v14.2.2';
  2. var cacheFiles = [
  3.     '/',
  4.     './index.html',
  5.     './lib/css/gc.spread.sheets.excel2013white.14.2.2.css',
  6.         './lib/css/gc.spread.sheets.designer.14.2.2.css',
  7.         './custom.css',
  8.     './lib/scripts/gc.spread.sheets.all.14.2.2.js',
  9.     './lib/scripts/plugins/gc.spread.sheets.charts.14.2.2.js',
  10.     './lib/scripts/plugins/gc.spread.sheets.shapes.14.2.2.js',
  11.     './lib/scripts/plugins/gc.spread.sheets.print.14.2.2.js',
  12.     './lib/scripts/plugins/gc.spread.sheets.barcode.14.2.2.js',
  13.     './lib/scripts/plugins/gc.spread.sheets.pdf.14.2.2.js',
  14.     './lib/scripts/plugins/gc.spread.pivot.pivottables.14.2.2.js',
  15.     './lib/scripts/interop/gc.spread.excelio.14.2.2.js',
  16.     './lib/scripts/resources/zh/gc.spread.sheets.resources.zh.14.2.2.js',
  17.     './lib/scripts/gc.spread.sheets.designer.resource.cn.14.2.2.js',
  18.     './lib/scripts/gc.spread.sheets.designer.all.14.2.2.js',
  19. ];
  20. // 监听 install 事件,安装完成后,进行文件缓存
  21. self.addEventListener('install', function (e) {
  22.     console.log('Service Worker 状态: install');
  23.     var cacheOpenPromise = caches.open(cacheName).then(function (cache) {
  24.         // 把要缓存的 cacheFiles 列表传入
  25.         return cache.addAll(cacheFiles);
  26.     });
  27.     e.waitUntil(cacheOpenPromise);
  28. });
  29. // 监听 fetch 事件,安装完成后,进行文件缓存
  30. self.addEventListener('fetch', function (e) {
  31.     console.log('Service Worker 状态: fetch');
  32.     var cacheMatchPromise = caches.match(e.request).then(function (cache) {
  33.             // 如果有cache则直接返回,否则通过fetch请求
  34.             return cache || fetch(e.request);
  35.         }).catch(function (err) {
  36.             console.log(err);
  37.             return fetch(e.request);
  38.         })
  39.     e.respondWith(cacheMatchPromise);
  40. });
  41. // 监听 activate 事件,清除缓存
  42. self.addEventListener('activate', function (e) {
  43.     console.log('Service Worker 状态: activate');
  44.     var cachePromise = caches.keys().then(function (keys) {
  45.         return Promise.all(keys.map(function (key) {
  46.             if (key !== cacheName) {
  47.                 return caches.delete(key);
  48.             }
  49.         }));
  50.     })
  51.     e.waitUntil(cachePromise);
  52.     return self.clients.claim();
  53. });
复制代码
index.html页面组册sw.js
  1. <script>
  2.                 if ('serviceWorker' in navigator) {
  3.                         window.addEventListener('load', function () {
  4.                                 navigator.serviceWorker.register('./sw.js')
  5.                                 .then(function (registration) {
  6.                                         // 注册成功
  7.                                         console.log('ServiceWorker registration successful with scope: ', registration.scope);
  8.                                 })
  9.                                 .catch(function (err) {
  10.                                         // 注册失败:
  11.                                         console.log('ServiceWorker registration failed: ', err);
  12.                                 });
  13.                         });
  14.                 }
  15.         </script>
复制代码


通过以上两个步骤的操作,spreadjs在线表格编辑器页面就支持PWA了。注意PWA需要https的支持,本地通过localhost测试不受影响。
通过localhost访问页面,可以在Chrome地址栏看到安装选项
image.png83627623.png
安装后,就可以通过应用程序按钮双击访问了
image.png363847655.png
对于Chrome 的PWA应用,同样可以通过快捷键开启开发者工具,在Network中可以看到,资源都是通过ServiceWorker缓存获取
image.png247318419.png



0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部