Service Workerで簡単なオフライン対応サイトを作ってみた
Service Workerで簡単なオフライン対応サイトを作ってみました。
ここ数年、勉強会で名刺を用意してなくて、そろそろ用意しようと思った時に、名刺に載せるポートフォリオサイトやプロフィールサイトあった方がいいよなと思ったのがきっかけで、どうせならオフライン対応ページを作ってみようと思いつくりました。
サンプルのコードを適当に拾ってきてやったので、正しくできてるか分かりませんが。ネットを切っても見れるはず。オフライン対応をやりたいのがメインだったので、サイトはめっちゃ適当です。
コードについてはこのGoogleのサンプルを自分用にちょっと変えただけです。
JavaScriptのファイルにこの記述を追加して
if ( 'serviceWorker' in navigator) { navigator.serviceWorker.register( './sw.js' , { scope: './' }).then( function (reg) { if (reg.installing) { console.log( 'Service worker installing' ); } else if (reg.waiting) { console.log( 'Service worker installed' ); } else if (reg.active) { console.log( 'Service worker active' ); } }). catch ( function (error) { // registration failed console.log( 'Registration failed with ' + error); }); } |
sw.jsというファイルを作り、以下のように書きました。
let version = '0.57' ; self.addEventListener( 'install' , e => { let timeStamp = Date.now(); e.waitUntil( caches.open( 'mismith' ).then(cache => { return cache.addAll([ `/`, `/index.html?timestamp=${timeStamp}`, `/bundle.js?timestamp=${timeStamp}` ]) .then(() => self.skipWaiting()); }) ) }); self.addEventListener( 'activate' , event => { event.waitUntil(self.clients.claim()); }); self.addEventListener( 'fetch' , event => { event.respondWith( caches.match(event.request, {ignoreSearch: true }).then(response => { return response || fetch(event.request); }) ); }); |
参考サイト
さいごに
オフライン対応するだけなら、そんなに難しいコードではありませんでした。ちゃんとやるならもっと書かないとダメだと思いますが。
Service Workerの触りはできたので、ちゃんと理解できるように情報収集していこうと思います。