zoukankan      html  css  js  c++  java
  • PWA相关代码

    sw.js 文件

    let CacheName = 'plus-v1';
    var filesToCache = [
    ];
    
    self.addEventListener('install', function (e) {
        console.log('[ServiceWorker] Install');
        e.waitUntil(
            caches.open(CacheName).then(function (cache) {
                console.log('[ServiceWorker] Caching app shell');
                return cache
                    .addAll(filesToCache)
                    .then(function () {
                        return self.skipWaiting();
                    })
                    .catch(function (error) {
                        console.log('Failed to cache:', error);
                    });
            })
        );
    });
    
    self.addEventListener('activate', function (e) {
        console.log('[ServiceWorker] Activate');
        e.waitUntil(
            caches
            .keys()
            .then(function (keyList) {
                return Promise.all(
                    keyList.map(function (key) {
                        console.log(`key-----------${key}`);
                        if (key !== CacheName) {
                            console.log('[ServiceWorker] Removing old cache', key);
                            return caches.delete(key);
                        }
                    })
                );
            })
            .then(function () {
                return self.clients.claim();
            })
        );
    });
    
    self.addEventListener('fetch', function (event) {
        console.log('[Service Worker] Fetch', event.request.url);
        event.respondWith(
            caches.match(event.request).then(function (response) {
                // 如果 Service Worker有自己的返回,就直接返回,减少一次 http 请求
                if (response) {
                    return response;
                }
                // 如果 service worker 没有返回,那就得直接请求真实远程服务
                var requestToCache = event.request.clone(); // 把原始请求拷过来
                return fetch(requestToCache).then(function (httpRes) {
                    // http请求的返回已被抓到,可以处置了。
    
                    // 请求失败了,直接返回失败的结果就好了。
                    if (!httpRes || httpRes.status !== 200) {
                        return httpRes;
                    }
    
                    // 请求成功的话,将请求缓存起来。
                    var responseToCache = httpRes.clone();
                    // 选择性缓存数据
                    if (
                        /.js$|.css$|.jpg$|.webp$|.svg$|.png$/.test(requestToCache.url) &&
                        !/sw/.test(requestToCache.url)
                    ) {
                        caches.open(CacheName).then(function (cache) {
                            cache.put(requestToCache, responseToCache);
                        });
                    }
                    return httpRes;
                });
            })
        );
    });
  • 相关阅读:
    word(2)--如何解决word中首行失效的问题?
    Google AK47 的设计者 阿米特 辛格(Amit Singhal)博士如何评价机器学习?
    技术人如何克服拖延症?
    解决WebService 中泛型接口不能序列化问题
    如何减少每次同步数据量
    C#开源系统大汇总
    log4.net
    C#自定义控件背景色透明的方法
    [p2p]UDP用打洞技术穿透NAT的原理与实现
    商品管理方案V2.0
  • 原文地址:https://www.cnblogs.com/xiaozhumaopao/p/11599366.html
Copyright © 2011-2022 走看看