摘要:勾上刷新頁面,顯示如圖實(shí)現(xiàn)原理使用,預(yù)先緩存和。又請(qǐng)求已經(jīng)緩存好的。加載離線圖片創(chuàng)建創(chuàng)建創(chuàng)建訪問,然后打開。一定要訪問啊,不然不會(huì)成功多個(gè)事件調(diào)用事件和其他事件一樣都是可以注冊(cè)多次的。
pwa-之service worker 基本概念
pwa-之service worker 離線文件處理
本章包含以下知識(shí)點(diǎn)
顯示離線頁面
加載離線圖片
加載離線css
多個(gè)fetch處理事件調(diào)用
簡(jiǎn)介網(wǎng)站圖片由于不確定的原因,可能無法訪問,這給用戶一個(gè)錯(cuò)覺,就是你的網(wǎng)站出了問題
其他諸如css,js文件都是網(wǎng)站必不可少的資源,本章我們來學(xué)些如何加載這些資源
首先讓我們來看看一個(gè)離線頁面
顯示離線頁面創(chuàng)建一個(gè)html頁面
Custom Offline Page Registration status:
創(chuàng)建一個(gè)service-worker.js文件
var version = 1; var currentCache = { offline: "offline-cache" + version }; var offlineUrl = "offline.html"; self.addEventListener("install", function(event) { event.waitUntil( caches.open(currentCache.offline).then(function(cache) { return cache.addAll([ "offline.svg", offlineUrl ]); }) ); }); self.addEventListener("fetch", function(event) { // request.mode = navigate isn"t supported in all browsers // so include a check for Accept: text/html header. if (event.request.mode === "navigate" || (event.request.method === "GET" && event.request.headers.get("accept").includes("text/html"))) { event.respondWith( fetch(createCacheBustedRequest(event.request.url)).catch(function(error) { // Return the offline page console.log("Fetch failed. Returning offline page instead.", error); return caches.match(offlineUrl); }) ); } else { // Respond with everything else if we can event.respondWith(caches.match(event.request) .then(function (response) { return response || fetch(event.request); }) ); } }); function createCacheBustedRequest(url) { var request = new Request(url, {cache: "reload"} ); // See https://fetch.spec.whatwg.org/#concept-request-mode // This is not yet supported in Chrome as of M48, so we need to explicitly check to see // if the cache: "reload" option had any effect. if ("cache" in request) { return request; } // If {cache: "reload"} didn"t have any effect, append a cache-busting URL parameter instead. var cacheBustingUrl = new URL(url, self.location.href); cacheBustingUrl.search += (cacheBustingUrl.search ? "&" : "") + "cachebust=" + Date.now(); return new Request(cacheBustingUrl); }
創(chuàng)建offline.html頁面
Offline Whoops! Your internet connection is not working.
Please check your network connection and try again.
創(chuàng)建offline.svg文件
打開index.html頁面。
勾上network->offline:刷新頁面,顯示如圖
實(shí)現(xiàn)原理使用cache Api,預(yù)先緩存offline.html和offline.svg。當(dāng)網(wǎng)絡(luò)不通時(shí),html請(qǐng)求走到cache方法里面去,然后響應(yīng)的是緩存好的offline.html。offline.html又請(qǐng)求已經(jīng)緩存好的offline.svg。所以正常顯示。
加載離線圖片創(chuàng)建index.html
Offline Images Registration status:
創(chuàng)建index.js
"use strict"; if ("serviceWorker" in navigator) { navigator.serviceWorker.register( "service-worker.js", { scope: "./" } ).then( function(serviceWorker) { document.getElementById("status").innerHTML = "successful"; }).catch(function(error) { document.getElementById("status").innerHTML = error; }); } else { document.getElementById("status").innerHTML = "unavailable"; }創(chuàng)建service-worker.js
var version = 1; var cacheName = "static-" + version; self.addEventListener("install", function(event) { event.waitUntil( caches.open(cacheName).then(function(cache) { return cache.addAll([ "index.html", "packt-logo.png" ]); }) ); }); self.addEventListener("fetch", function(event) { event.respondWith(caches.match(event.request)); });訪問/Chapter%202/02/index.html,然后打開offline。頁面仍然可以正常顯示。
記住一定要加上index.html。大部分的服務(wù)器會(huì)把/指向到index.html。這樣子我們的頁面緩存不會(huì)生效。加載離線css創(chuàng)建index.html
Offline CSS Registration status:
創(chuàng)建service-worker.js
var version = 1; var cacheName = "static-" + version; self.addEventListener("install", function(event) { event.waitUntil( caches.open(cacheName).then(function(cache) { return cache.addAll([ "index.html", "style-2.css" ]); }) ); }); self.addEventListener("fetch", function(event) { if (/index/.test(event.request.url) || /style-2/.test(event.request.url)) { event.respondWith(caches.match(event.request)); } });創(chuàng)建style-1.css
body { background-color: lightgreen; }創(chuàng)建style-2.css
body { background-color: red; }同樣訪問html可以看到綠色的背景,offline之后顯示的紅色的背景。
一定要訪問index.html啊,不然不會(huì)成功多個(gè)fetch事件調(diào)用fetch事件和js其他事件一樣都是可以注冊(cè)多次的。
創(chuàng)建index.html
Mutiple Fetch Registration status:
創(chuàng)建service-worker.js
var cookFetchHandler = function(event) { console.log("DEBUG: Inside the /cook handler."); if (event.request.url.indexOf("/cook/") > 0) { event.respondWith(new Response("Fetch handler for /cook")); } }; var cookBookFetchHandler = function(event) { console.log("DEBUG: Inside the /cook/book handler."); if (event.request.url.endsWith("/cook/book")) { event.respondWith(new Response("Fetch handler for /cook/book")); } }; var fetchHandlers = [cookBookFetchHandler, cookFetchHandler]; fetchHandlers.forEach(function(fetchHandler) { self.addEventListener("fetch", fetchHandler); });瀏覽器里面訪問
然后訪問/cook/,是/cook/不是/cook
訪問/cook/book
關(guān)注我的微信公眾號(hào),更多優(yōu)質(zhì)文章定時(shí)推送
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108288.html
相關(guān)文章
pwa-之service worker 離線文件處理
摘要:勾上刷新頁面,顯示如圖實(shí)現(xiàn)原理使用,預(yù)先緩存和。又請(qǐng)求已經(jīng)緩存好的。加載離線圖片創(chuàng)建創(chuàng)建創(chuàng)建訪問,然后打開。一定要訪問啊,不然不會(huì)成功多個(gè)事件調(diào)用事件和其他事件一樣都是可以注冊(cè)多次的。 pwa-之service worker 基本概念pwa-之service worker 離線文件處理 本章包含以下知識(shí)點(diǎn) 顯示離線頁面 加載離線圖片 加載離線css 多個(gè)fetch處理事件調(diào)用 簡(jiǎn)介...
[翻譯]Service workers:PWA背后的英雄
摘要:如果返回的被拒,另一個(gè)同步事件被自動(dòng)地開始重試操作,直到返回一個(gè)成功狀態(tài)的。推送機(jī)制使得服務(wù)器能夠向發(fā)送信息,然后將信息展示給用戶才是消息通知。然后它們可以發(fā)送消息通知,或者是更新的狀態(tài)。 原文地址:https://medium.freecodecamp.org/service-workers-the-little-heroes-behind-progressive-web-apps-...
PWA 知不知
摘要:類似于我們熟知的,可以脫離主線程,處理一些臟累活,干完后通過向主線程匯報(bào)工作結(jié)果。所以,也是脫離主線程的存在,與不同的是,具有持久化的能力。什么是 PWA Progressive Web App, 簡(jiǎn)稱 PWA,是「漸進(jìn)式」提升 Web App 體驗(yàn)的一種新方法,能給用戶類似原生應(yīng)用的體驗(yàn)。 「高可靠,高性能,優(yōu)體驗(yàn)」是 PWA 慣用的形容詞,他的另外一個(gè)優(yōu)點(diǎn)就是「漸進(jìn)式」,開發(fā)者可以對(duì)照 ...
PWA之 workbox 學(xué)習(xí)
摘要:另一部分屬于進(jìn)程,它重新在后臺(tái)起了一個(gè)進(jìn)程,它和應(yīng)用的主進(jìn)程互不影響,可以同時(shí)執(zhí)行。其中一般作為應(yīng)用程序?yàn)g覽器和網(wǎng)絡(luò)如果可用之間的代理服務(wù)。他們還將允許訪問推送通知和后臺(tái)同步。然后開始在進(jìn)程中通過事件,來監(jiān)聽請(qǐng)求,并對(duì)請(qǐng)求和響應(yīng)進(jìn)行緩存。 前言:我們的應(yīng)用可以分為兩部分,一部分是屬于主進(jìn)程的(包括js(同步,異步),以及dom渲染等等),在一個(gè)時(shí)刻點(diǎn),只能執(zhí)行一個(gè),要么先去渲染dom,...
發(fā)表評(píng)論
0條評(píng)論
閱讀 1414·2021-09-02 09:53
閱讀 2677·2021-07-29 13:50
閱讀 1726·2019-08-30 11:07
閱讀 1583·2019-08-30 11:00
閱讀 1461·2019-08-29 14:00
閱讀 1854·2019-08-29 12:52
閱讀 2572·2019-08-29 11:11
閱讀 3429·2019-08-26 12:23