Chrome 45 の Service Worker の変更点
本記事は Chrome 45 の Service Worker のリリースノートを日本語に意訳したものです。原文は service-worker-discuss グループで読むことができます。
以前のバージョンのリリースノートはこちら。
今回も草稿を @FalkenMatto さん (原文の投稿者) にレビューしてもらいました。ありがとうございます。
Chrome 45 の Service Worker 関係の変更は次のとおりです。
新機能
ServiceWorkerRegistration.update()
1 が実装されました (Bug, Spec)。Client.id
が実装されました (Bug, Spec)。- 呼び出し元のオリジンに属する全ての ServiceWorkerRegistration を返す
navigator.serviceWorker.getRegistrations()
が実装されました (Bug, Spec)。
API の変更
Client.postMessage()
で送られたメッセージがWindow
ではなくnavigator.serviceWorker
にディスパッチされるようになりました (Feature, Demo)。- “failing to activate” の概念が削除され、いったん
activate
イベントがディスパッチされた Service Worker は必ず active 状態になるようになりました。waitUntil()
でアクティベーション処理を遅延させることができますが、これをwaitUntil(Promise.reject())
してもwaitUntil(Promise.resolve())
した場合と同じ挙動になります2 (Bug, Spec Discussion)。 ServiceWorker.terminate()
が削除されました (以前はterminate()
が呼ばれるとInvalidAccessError
例外を投げていました) (Bug)。WindowClient.frameType
がClient.frameType
と重複していたため、削除されました (Bug, Spec)。Clients.openWindow()
に不正な URL が渡された場合、SyntaxError
ではなくTypeError
で reject されるようになりました (Bug, Spec)。FetchEvent.cancellable
のデフォルト値が修正されました (Bug)。- (Push API)
PushSubscription.subscriptionid
が削除されました。今後はPushSubscription.endpoint
を使用してください (Feature, Doc)。 - (Push API)
gcm_user_visible_only
が削除されました。今後はuserVisibleOnly
を使用してください (Feature, Doc)。
改善点
- Service Worker がナビゲーション時以外にも更新されるようになりました。具体的には Service Worker 起動時に前回の更新確認から 24 時間以上経っている場合に更新確認が行われます。これにより Service Worker を Push Notifications のためだけに使っている場合も適切に更新されるようになります (Bug)。
- Service Worker のスクリプトを格納しているバックエンドの実装が BlockFile DiskCache から、より安定性の高い SimpleCache に切り替わりました (Bug)。
- (Chrome 44 以降) Service Worker のイベントが “chrome://net-internals” にロギングされるようになりました (Bug)。
- Service Worker の更新確認時、スクリプトに変更がなかった場合はディスクに余計な書き込みを行わないようになりました (Bug)。
DevTools 関係の変更
Note: 最新の DevTools を試すために、Dev channel もしくは Canary の使用をおすすめします。
- DevTools のコンソールのコンテキストの初期値が Service Worker からページに変更されました (Bug)。
- Service Worker を使ったアプリの開発効率向上を目指し、現在 “Service Worker explorer UI” の開発に取り組んでいます。この機能はまだ experimental で、現在 UX の改良が行われています。こちらのスライドを参考に試用していただき、是非フィードバックをお寄せください。
バグフィックス
- Service Worker が
iframe[sandbox]
を尊重するようになりました (Bug)。 - Service Worker のアイドルタイマーが他のイベントと同じようにメッセージイベントでもリセットされるようになりました (Bug)。
- バグフィックスの全リストはこちらで確認できます。
訳者補足
-
update()
については「Service Worker の update()」で解説を書きました。 ↩ -
“failing to activate” の挙動は「Service Worker の Registration」でも紹介しました。 ↩