5. 2018 年の Web 標準ということで…
‣ Service Worker
‣ これからの Web において、導⼊しない理由がない
‣ Web Components
‣ たまにはライブラリに頼らず Web UI を構築してみたい
‣ Web Payments
‣ Web の決済は全て Web Payments に統⼀されるべき
11. self.addEventListener('fetch', e => {
e.respondWith(preferCache(e.request));
});
async function preferCache(request) {
// get cache via Cache API
const cache = await caches.match(request);
// request if cache is empty
const response = cache || await fetch(request.clone());
return response;
}
service-worker.js
Cache API
Service Worker
28. Web Components
‣ グローバルスコープな DOM にスコープが欲しい
‣ CSS を扱うのが難しい問題の解決
‣ Web の部品を再利⽤したい問題の解決
‣ コンポーネント化が定着してきた昨今の Web 開発
‣ React をはじめとしたビューライブラリの流れ
29. Web Components を司る Web 標準技術
Custom Elements Shadow DOM ES Modules
class FancyButton extends HTMLElement {
constructor() { ... }
connectedCallback() { ... }
disconnectedCallback() { ... }
attributeChangedCallback() { ... }
}
customElements
.define('fancy-button', FancyButton);
振る舞いを定義する
カスタム要素を登録する
30. Web Components を司る Web 標準技術
Custom Elements Shadow DOM ES Modules
const doc = document;
const btn = doc.querySelector('button');
const shadowRoot = btn.attachShadow({
mode: 'open' // or 'close'
});
// readonly property
console.log(btn.shadowRoot);
Shadow DOM を⽣やす
Shadow DOM を参照する
31. Web Components を司る Web 標準技術
Custom Elements Shadow DOM ES Modules
export default class FancyButton {
...
}
import FancyButton from './fancy-button.js';
モジュールを export する
モジュールを import する
47. Web Payments
‣ Web 上の決済を、もっと便利で安全にしたい
‣ クレジットカードは便利だけど、紛失時のリスクが⼤きい
‣ Web サービス利⽤時の⼊⼒も、双⽅にリスクがある
‣ Payment Request API
‣ ブラウザで UI を提供して、決済体験のギャップを減らしたい