成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

pwa-之service worker 離線文件處理

mylxsw / 2599人閱讀

摘要:勾上刷新頁面,顯示如圖實(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:

logo

創(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)介...

    fizz 評(píng)論0 收藏0
  • [翻譯]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-...

    snifes 評(píng)論0 收藏0
  • 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ì)照 ...

    MartinDai 評(píng)論0 收藏0
  • 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,...

    zhangyucha0 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<