とろろこんぶろぐ

かけだしR&Dフロントエンジニアの小言

Workboxでuser-agentを確認する

workbox

Service Workerをライトに使えるようにするためのもの。

developers.google.com

PWA化も可能だし、簡単にhtmlや画像などのリソースをキャッシュさせることができる。

使い方

1. sw.jsを用意する。

 /* global workbox */
workbox.precaching.precacheAndRoute([], {});
 
workbox.routing.registerRoute(
  /\.+\.html/,
  workbox.strategies.cacheFirst({
    cacheName: "page",
    cacheExpiration: {
      maxAgeSeconds: 86400,
    },
  }),
  "GET",
);

workbox.routing.registerRoute(
  /\.(jpg|jpeg|png|svg|woff|ttf|eot)/,
  workbox.strategies.cacheFirst({
    cacheName: "assets",
    cacheExpiration: {
      maxAgeSeconds: 1209600,
    },
  }),
  "GET",
);

2. webpackでworkboxを定義してビルドする。

pluginが用意されているのでそれを使う。

const WorkboxPlugin = require("workbox-webpack-plugin");
...
    new WorkboxPlugin.InjectManifest({
      swSrc: path.resolve(rootDir, "./src/sw.js"),
      swDest: "bundle-sw.js",
    }),
...

3. index.htmlでservice workerを登録する。

...
            if (navigator.serviceWorker != null) {
              let isFirstInstall = navigator.serviceWorker.controller == null;
              navigator.serviceWorker.addEventListener('controllerchange', () => {
                if (isFirstInstall) {
                  isFirstInstall = true
                } else {
                  // Update detected
                  // Prompt to reload
                }
              });
              navigator.serviceWorker.register('/bundle-sw.js');
            }

self

workbox、つまりワーカーはselfを参照できる。

sw.js

console.log(self);

f:id:ka2jun8:20181114233955p:plain

userAgentを確認してキャッシュを変更したいと思っていたが、selfからuserAgentも取得できた。