Chrome 50 ベータ版: プッシュ通知の改良、宣言型プリロードなど
2016年3月29日火曜日
[この記事は通知の騎士、Peter Beverloo と Nicolás Satragno による Android Developers Blog の記事 "Push notification improvements and declarative preload" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]
特に記載のない限り、下記の変更は Android、Chrome OS、Linux、Mac、Windows 向けの最新の Chrome ベータ版に適用されます。
ペイロードに加えて、サイトはユーザーが通知をクローズしたことも検出できるようになります。これによってアナリティクスの精度が向上し、複数デバイスでの通知削除ができるようになりました。また、通知の外観を細かく設定できます。たとえば、カスタムのタイムスタンプや通知アクションのカスタム アイコンの設定などです。さらに通知の更新時に、デバイスがその通知を音やバイブレーションで知らせるか、無音のままにするかを指定することもできます。
Posted by Eiji Kitamura - Developer Relations Team
特に記載のない限り、下記の変更は Android、Chrome OS、Linux、Mac、Windows 向けの最新の Chrome ベータ版に適用されます。
プッシュ通知の改善
サイトからプッシュ通知を使って、ネイティブ アプリケーションと同じ方法でシステムレベルの通知をトリガーできるようになりました。プッシュ通知の初期バージョンでは、サーバーからの通知に対し、Service Worker が自ずから情報を取得することが前提でした。この仕様は、複数のメッセージが飛び交っている場合や、デバイスのネットワーク接続が不安定な場合にはうまく機能せず、問題の原因となっていました。最新バージョンの Chrome では、サイトで通知データのペイロードをプッシュ メッセージに含むことができるようになるため、サーバーの確認は不要になります。ユーザーのプライバシーを保護するため、プッシュ通知のペイロードは暗号化しなければなりません。プッシュ通知のペイロードは Push API 仕様の一環であり、Firefox では既にサポートされています。ペイロードに加えて、サイトはユーザーが通知をクローズしたことも検出できるようになります。これによってアナリティクスの精度が向上し、複数デバイスでの通知削除ができるようになりました。また、通知の外観を細かく設定できます。たとえば、カスタムのタイムスタンプや通知アクションのカスタム アイコンの設定などです。さらに通知の更新時に、デバイスがその通知を音やバイブレーションで知らせるか、無音のままにするかを指定することもできます。
Chrome 50 では、通知アクションにカスタム アイコンを使用できるようになりました
宣言型プリロード
ウェブページの中には、Chrome が複数の場所からリソースを読み込まないと、完全な形で表示できないタイプのものがあります。たとえば、サイズの大きな JavaScript ファイルには特殊なスタイルシートが必要な場合がありますが、その場合 Chrome 側では、いったん JavaScript を実行してみないと CSS も読み込む必要があるかどうかわかりません。Chrome では<link rel='preload'>
属性がサポートされます。今後デベロッパーは、あらかじめダウンロードしておくリソースを指定できるようになったので、ユーザーが意味の分かる状態のコンテンツを表示するまでの時間を短縮できます。
Chrome 50 でプリロードを実行してページを読み込んだ状態(左)と、プリロードができない Chrome 49 でページを読み込んだ状態(右)
今回のリリースに追加されたその他の機能
- HTMLMediaElement.play() は promise を返すようになり、自動再生が失敗しても対処しやすくなりました。
- HTMLCanvasElement.toBlob() を使って、canvas 要素の画像を BLOB ファイルとして保存できるようになりました。
- Chrome で ImageBitmap オブジェクトの作成をサポートします。これによって canvas 要素へ非同期で迅速に書き込むことができるようになりました。
- AbsoluteDeviceOrientation でデバイスの向きの絶対値を取得できるようになり、これまでの DeviceOrientation は磁力計を使わない相対値を返すようになりました。これで、VR で頭の動きを追跡する際、近くにある金属物によってずれが発生するのを防ぐことができます。
- DOMTokenList に「サポート トークン」機能が追加されました。これによってデベロッパーは、サンドボックス オプションやリンクの関係が含まれている要素を検出できるようになりました。
- FormData オブジェクトはウェブフォーム用のデータをプログラムで作成するものですが、サイトでこれを使うと、値の書き込みだけでなくデータの精査や書き換えもできるようになります。
- ES2015 Unicode の正規表現フラグ uがサポートされました。正規表現シンボルとして有名な @@match、@@replace、@@search、@@split のほかにこのフラグが加わり、デベロッパーは正規表現で、より精密なマッチングパターンを指定できるようになります。
- サイトで音声や映像のストリーム再生が途切れないようにバッファを取得できる、SourceBuffer.mode 属性や「sequence」オプションがサポートされました。
- プレゼンテーションの接続をより確実に制御できるようになる、PresentationConnectionCloseEvent と PresentationConnectionCloseReason がサポートされました。廃止予定の PresentationConnection.onStateChange の代わりに、これらを使ってください。
- どこにもフォーカスが置かれていない状態でユーザーが Tab キーや Shift+Tab キーを押した場合、当該サイトでフォーカスが置かれるべき最初のターゲットをサイトで制御できるようになりました。
- ウェブ アニメーションの仕様への準拠度を改善するため、Cancel イベントと Animation.id がサポートされました。pause() はアイドル状態ではなく一時停止状態を利用します。なお、キーフレーム内のキー名にダッシュを許容する仕様は廃止予定です。
- Web Audio の BiquadFilter ノードのパラメータ自動化は、これまで 128 フレームごとに評価していましたが、サンプル フレームが現れるたびに評価する仕様に変更されました。これによって、レゾナント フィルタの除去がより円滑になります。
- Chrome は TLS バージョンのフォールバックのサポートを終了します。このバージョンのフォールバックを攻撃者が悪用すると、すべてのサイトに対して強制的に旧バージョンの TLS を利用させる設定に変更することができるからです。
細かな変更
- Chrome の TLS で X25519 曲線がサポートされました。これによって、暗号化がより簡素かつ高速になります。
- -webkit-background-composite は標準化の対象外になり、また利用度も低いため削除されました。
- SVGZoomEvent は Chrome 上では何も動作をしませんが、より正確に仕様に準拠するため、廃止されました。
- RTCPeerConnection のメソッドである createOffer() と createAnswer() は、promise ベースの実装を有効にするので廃止されました。
- <link rel='subresource'> は、上記のとおり<link rel='preload'> で置き換えるので廃止されました。
- XMLHTTPRequestProgressEvent は、より正確に仕様に準拠するため、ProgressEvent で置き換えられ、削除されました。
- Document.defaultCharset 属性は、より正確に仕様に準拠するため、削除されました。
- KeyboardEvent.prototype.keyLocation は、より多くのブラウザでサポートされている KeyboardEvent.prototype.location で置き換えられ、削除されました。
- SVGElement.offset* メソッドは、より正確に仕様に準拠するため、HTMLElement 以外の全要素から削除されました。
Posted by Eiji Kitamura - Developer Relations Team