1. 用語
この仕様書はInfra Standardに依存しています。 [INFRA]
この仕様書で使用されるいくつかの用語は、DOM、Fetch、高解像度時間、HTML、IDL、Service Workers、URL、およびVibration API標準で定義されています。 [DOM] [FETCH] [HR-TIME] [HTML] [WEBIDL] [SERVICE-WORKERS] [URL] [VIBRATION]
2. 通知
通知とは、 メッセージの配信など、何かが発生したことを抽象的に表現するものです。
通知には、 サービスワーカー登録(nullまたはサービスワーカー登録)が関連付けられています。初期値はnullです。
通知には、 タイトル(文字列)が関連付けられています。
通知には、
方向("auto
"、"ltr
"、または"rtl
")が関連付けられています。
通知には、 言語(文字列)が関連付けられています。
通知には、 本文(文字列)が関連付けられています。
通知には、 ナビゲーションURL (nullまたはURL)が関連付けられています。初期値はnullです。
通知には、 タグ(文字列)が関連付けられています。
通知 (notification) には関連付けられた データ ( レコード) がある。
通知 (notification)
には関連付けられた タイムスタンプ ( EpochTimeStamp
)
がある。
タイムスタンプは通知が実際に発生した時間を示すために使用されることがある。例えば、デバイスがオフラインのためにすぐに配信できなかったメッセージの通知の場合は過去の時間、またはこれから始まる会議の通知の場合は未来の時間を示すことがある。
通知 (notification) には関連付けられた オリジン (オリジン) がある。
通知 (notification) には関連付けられた 再通知の設定 (ブール値) がある。初期値は false。true の場合、新しい通知が既存の通知と同じ タグ を持つ場合に、通知表示手順が実行された後にエンドユーザーが再び通知されるべきことを示す。
通知 (notification) には関連付けられた サイレント設定 (null またはブール値) がある。初期値は null。true の場合、音や振動を発生させてはならないことを示す。null の場合は、音や振動の発生はプラットフォームの慣習に委ねられる。
通知 (notification) には関連付けられた インタラクション要求設定 (ブール値) がある。初期値は false。true の場合、十分に大きな画面を持つデバイスで通知が、エンドユーザーが通知をアクティブ化または解除するまで簡単にアクセス可能な状態で維持されるべきであることを示す。
通知 (notification) には以下の関連付けられたグラフィックスを持つことができる: 画像URL, アイコンURL, および バッジURL。また、それに対応する 画像リソース, アイコンリソース, および バッジリソース がある。
画像リソース は通知 (notification) の内容の一部として表示される画像で、アイコンリソース や バッジリソース よりも高い視覚的優先度で表示されるべきだが、表示される機会は少ない可能性がある。
アイコンリソース は通知 (notification) を補完する画像 (例えばアイコンや送信者の写真) である。
バッジリソース はウェブアプリケーションを表すアイコン、またはウェブアプリケーションが多様な 通知 を送信する場合は通知のカテゴリを表すアイコンである。それは通知 (notification) 自身を表示するのに十分なスペースがない場合に通知を表すために使用されるかもしれない。また通知 (notification) 内部に表示されることもあるが、その場合は 画像リソース や アイコンリソース よりも視覚的優先度が低いべきである。
通知 (notification) には関連付けられた 振動パターン (リスト) がある。初期値は « »。
開発者は、画像, アイコン, バッジ, または 振動パターン を通じてエンドユーザーにアクセスできない情報を伝達しないよう推奨される。特に、これらの機能をサポートしない通知プラットフォームがそれらを無視する可能性があるためである。
通知 (notification) には関連付けられた アクション (リスト、0個以上の通知アクションのリスト) がある。 通知アクション はエンドユーザーの選択肢を表す。それぞれの 通知アクション には以下が関連付けられる:
- 名前
- 文字列。
- タイトル
- 文字列。
- ナビゲーションURL
- Null または URL。初期値は null。
- アイコンURL
- Null または URL。初期値は null。
- アイコンリソース
- Null またはリソース。初期値は null。
ユーザーは通知自体を有効化する代わりに、アクションを有効化することができます。 サポートされるアクションの最大数は、通知プラットフォームの制約の範囲内で、ゼロ以上の実装定義の整数です。
アクションの表示はプラットフォーム依存であるため、開発者は通知からエンドユーザーが実行できるすべてのアクションを、ウェブアプリケーション内でも利用可能にするよう推奨されます。
一部のプラットフォームでは、 アイコンリソースをプラットフォームのビジュアルスタイルにより適合させるために修正し、例えば角を丸めたり、特定の色で塗りつぶしたりして、エンドユーザーに表示する場合があります。開発者はそのようなケースに柔軟に対応でき、色の喪失や角の切り取りなどで重要な情報が失われないアイコンを使用することが推奨されます。
非永続的通知は、通知であり、 サービスワーカー登録がnullのものです。
永続的通知は、通知であり、
サービスワーカー登録がnullでないものです。
設定オブジェクトで通知を作成するには、文字列 title、
NotificationOptions
辞書 options、および
environment settings object
settingsを受け取って行います:
通知を作成するには、文字列
title、
NotificationOptions
辞書 options、origin
origin、URL baseURL、EpochTimeStamp
fallbackTimestampを受け取って行います:
-
notificationを新しい通知とします。
-
もしoptions["
silent
"] がtrueであり、 options["vibrate
"] 存在する場合、TypeErrorをスローします。 -
もしoptions["
renotify
"] がtrueであり、 options["tag
"] が空文字列の場合、TypeErrorをスローします。 -
notificationのdataを StructuredSerializeForStorage(options["
data
"])の結果に設定します。 -
notificationのtitleをtitleに設定します。
-
notificationのoriginをoriginに設定します。
-
もしoptions["
navigate
"] 存在する場合、それをbaseURLでパースし、失敗しない場合は notificationのnavigation URLにその値を設定します。(失敗した場合、notificationのnavigation URLはnullのままです。) -
もしoptions["
image
"] 存在する場合、それをbaseURLでパースし、失敗しない場合は notificationのimage URLにその値を設定します。(失敗した場合、notificationのimage URLは設定しません。) -
もしoptions["
icon
"] 存在する場合、それをbaseURLでパースし、失敗しない場合は notificationのicon URLにその値を設定します。(失敗した場合、notificationのicon URLは設定しません。) -
もしoptions["
badge
"] 存在する場合、それをbaseURLでパースし、失敗しない場合は notificationのbadge URLにその値を設定します。(失敗した場合、notificationのbadge URLは設定しません。) -
もしoptions["
vibrate
"] 存在する場合、バリデートおよび正規化し、 notificationの vibration patternにその値を設定します。 -
もしoptions["
timestamp
"] 存在する場合は notificationのtimestampにその値を設定します。そうでない場合は notificationのtimestampにfallbackTimestampを設定します。 -
notificationのrenotify preferenceを options["
renotify
"]に設定します。 -
notificationのsilent preferenceを options["
silent
"]に設定します。 -
notificationのrequire interaction preferenceを options["
requireInteraction
"]に設定します。 -
notificationのactionsを« »に設定します。
-
options["
actions
"]の各entryについて、 サポートされるアクションの最大数まで(余分なエントリーはスキップ): -
notificationを返します。
2.1. ライフタイムとUI統合
ユーザーエージェントは、通知のリストを保持しなければなりません。これは、ゼロ個以上のリストとして 通知を管理します。
ユーザーエージェントは、非永続的通知に対して、作成後数秒でクローズ手順を実行するべきです。
ユーザーエージェントは、プラットフォームの「通知センター」(利用可能な場合)に非永続的通知を表示しないようにするべきです。
ユーザーエージェントは、永続的通知を通知のリストから削除されるまで保持するべきです。
永続的通知は、
そのclose()
メソッドがNotification
オブジェクトのいずれかで呼び出される場合があります。
ユーザーエージェントは、永続的通知をプラットフォームの「通知センター」(利用可能な場合)に表示するべきです。
2.2. 権限統合
Notifications APIは、強力な機能として識別され、
名前
"notifications
"で表されます。
[Permissions]
通知権限状態を取得するためには、以下の手順を実行します:
-
permissionStateを"
notifications
"を使って 現在の権限状態を取得する結果とします。 -
もしpermissionStateが"
prompt
"の場合、"default
"を返します。 -
permissionStateを返します。
2.3. 方向性
このセクションはHTMLのRenderingセクションで使用される用語と同等の内容で記述されています。[HTML]
ユーザーエージェントは、通知の
タイトル、本文、および各アクションのタイトルのUnicodeセマンティクスを尊重することが期待されています。表示時にはそれぞれが双方向アルゴリズムのルールP1、P2、P3に従い、LF文字(U+000A)の段落分割等も含め、独立した双方向アルゴリズム段落集合として扱われます。各段落について、
タイトル、本文、および各アクションのタイトルは、
通知のdirectionが"auto
"以外の場合、高レベルなP2およびP3の上書きとして機能します。[BIDI]
通知のdirectionは、通知プラットフォームが並べて表示する場合、通知のアクションがエンドユーザーへ表示される順序にも影響します。
2.4. 言語
通知のlanguageは、 通知のタイトル、本文、 および各アクションのタイトルの主な言語を指定します。その値は文字列です。空文字列は主な言語が不明であることを示します。それ以外の文字列は言語タグとして解釈されます。有効性や構文の正しさは強制されません。[BCP47]
開発者は有効な言語タグのみを使用することが推奨されています。
2.5. リソース
ある通知 notificationに対するフェッチ手順は以下の通りです:
-
通知プラットフォームが画像をサポートしている場合、フェッチ notificationのimage URL(image URLが設定されている場合)。
このリソースは
<img>
のようにフェッチする意図ですが、抽象化が必要です。その後、並行して:
-
レスポンスを待つ。
-
画像フォーマットがサポートされていれば、notificationのimage resourceにデコード済みリソースを設定する。(そうでなければ notificationはimage resourceを持たない。)
-
-
通知プラットフォームがアイコンをサポートしている場合、フェッチ notificationのicon URL (icon URLが設定されている場合)。
このリソースは
<img>
のようにフェッチする意図ですが、抽象化が必要です。その後、並行して:
-
レスポンスを待つ。
-
画像フォーマットがサポートされていれば、notificationのicon resourceにデコード済みリソースを設定する。(そうでなければ notificationはicon resourceを持たない。)
-
-
通知プラットフォームがバッジをサポートしている場合、フェッチ notificationのbadge URL (badge URLが設定されている場合)。
このリソースは
<img>
のようにフェッチする意図ですが、抽象化が必要です。その後、並行して:
-
レスポンスを待つ。
-
画像フォーマットがサポートされていれば、notificationのbadge resourceにデコード済みリソースを設定する。(そうでなければ notificationはbadge resourceを持たない。)
-
-
通知プラットフォームがアクションおよびアクションアイコンをサポートしている場合、notificationのactions内の各actionについて:icon URLがnullでない場合、フェッチ actionのicon URL。
このリソースは
<img>
のようにフェッチする意図ですが、抽象化が必要です。その後、並行して:
-
レスポンスを待つ。
-
画像フォーマットがサポートされていれば、actionのicon resourceにデコード済みリソースを設定する。(そうでなければ actionのicon resourceはnullのまま。)
-
2.6. 通知の表示
指定された通知 notificationの通知表示手順は以下の通りです:
-
notificationについてフェッチ手順を実行します。
-
すべてのフェッチが完了し、notificationの image resource、 icon resource、 badge resource (存在する場合)、および notificationのactionsの icon resources (存在する場合)がセットされるのを待ちます。
-
shownをfalseとします。
-
oldNotificationを、通知のリストの中から tagが空文字列でなく、 notificationのtagと一致し、 originが notificationのoriginと同一オリジンであるもの(存在しない場合はnull)とします。
-
oldNotificationがnullでない場合:
-
oldNotificationに対してクローズイベント処理を行います。
-
通知プラットフォームが置換をサポートしている場合:
-
通知リストで oldNotificationを notificationに置き換えます。
-
shownをtrueに設定します。
通知プラットフォームは、ネイティブの置換をサポートすることが強く推奨されます。これはユーザー体験の向上につながります。
-
-
それ以外の場合、通知リストから oldNotificationを削除します。
-
-
shownがfalseの場合:
-
通知リストに notificationを追加します。
-
デバイス上にnotificationを表示します(例:通知プラットフォームAPIを呼び出すなど)。
-
-
shownがfalse、またはoldNotificationがnullでない場合で、 notificationのrenotify preferenceがtrueであれば、 notificationについてアラート手順を実行します。
-
notificationが非永続的通知の場合、 タスクをキューして
Notification
オブジェクト(notificationを表す)にshow
イベントを 発火します。
2.7. 通知のアクティブ化
ユーザーが通知プラットフォームのアクティブ化をサポートしている場合、通知 notification またはその actions のいずれかがエンドユーザーによってアクティブ化されたとき、ユーザーエージェントは(他に指定がない限り)以下の手順を実行しなければなりません:
-
actionをnullとします。
-
エンドユーザーがnotificationのactionsのいずれかをアクティブ化した場合、actionにその 通知アクションを設定します。
-
navigationURLをnotificationの navigation URLとします。
-
actionがnullでない場合、navigationURLをactionの notification action navigation URLに設定します。
この仕様により、通知アクションの navigation URLがnullの場合は
click
イベントにフォールスルーし、ウェブ開発者により柔軟性を提供します。 -
navigationURLがnullでない場合:
-
実装定義の方法で次のいずれかを選択します:
-
ユーザーエージェントのトップレベルトラバーサブル集合内の既存の トップレベルトラバーサブルを navigationURLにナビゲートする。
-
新しいトップレベルトラバーサブルを作成し、navigationURLを指定する。
ユーザーエージェントはプラットフォームの慣習に合わせることが強く推奨されます。
-
-
終了します。
-
-
notificationが永続的通知の場合:
-
actionNameを空文字列とします。
-
actionがnullでない場合、actionNameにactionの nameを設定します。
- notificationclickという名前でサービスワーカー通知イベントを発火します。notificationとactionNameを指定します。
-
-
それ以外の場合、タスクをキューして以下の手順を実行します:
-
intoFocusを
Notification
オブジェクト(notificationを表す)のclick
イベントを 発火し、そのcancelable
属性をtrueで初期化した結果とします。ユーザーエージェントは、
focus()
がclick
イベントリスナー内で動作するようにすることが推奨されます。 -
intoFocusがtrueの場合、ユーザーエージェントは notificationの関連するブラウジングコンテキストのビューポートをフォーカスすべきです。
-
ウェブプラットフォーム全体で「activate」は意図的に「click」と誤称されています。
2.8. 通知のクローズ
通知が基盤となる通知プラットフォームまたはエンドユーザーによってクローズされた場合、その通知に対してクローズ手順を実行しなければなりません。
指定された通知 notificationのクローズ手順は以下の通りです:
-
notificationに対してクローズイベント処理を行います。
-
通知のリストから notificationを削除します。
指定された通知 notificationに対してクローズイベント処理を行うには:
-
notificationが永続的通知であり、かつ notificationがエンドユーザーによってクローズされた場合、"
notificationclose
"という名前でサービスワーカー通知イベントを発火します。notificationを指定します。 -
notificationが非永続的通知の場合、 タスクをキューして
Notification
オブジェクト(notificationを表す)にclose
イベントを 発火します。
2.9. エンドユーザーへのアラート
指定された通知 notificationについてエンドユーザーにアラートを行うアラート手順は以下の通りです:
-
notificationのバイブレーションパターン(存在する場合)を用いて バイブレーションを実行します。
3. API
[Exposed =(Window ,Worker )]interface :
Notification EventTarget {constructor (DOMString ,
title optional NotificationOptions = {});
options static readonly attribute NotificationPermission permission ; [Exposed =Window ]static Promise <NotificationPermission >requestPermission (optional NotificationPermissionCallback );
deprecatedCallback static readonly attribute unsigned long maxActions ;attribute EventHandler onclick ;attribute EventHandler onshow ;attribute EventHandler onerror ;attribute EventHandler onclose ;readonly attribute DOMString title ;readonly attribute NotificationDirection dir ;readonly attribute DOMString lang ;readonly attribute DOMString body ;readonly attribute USVString navigate ;readonly attribute DOMString tag ;readonly attribute USVString image ;readonly attribute USVString icon ;readonly attribute USVString badge ; [SameObject ]readonly attribute FrozenArray <unsigned long >vibrate ;readonly attribute EpochTimeStamp timestamp ;readonly attribute boolean renotify ;readonly attribute boolean ?silent ;readonly attribute boolean requireInteraction ; [SameObject ]readonly attribute any data ; [SameObject ]readonly attribute FrozenArray <NotificationAction >actions ;undefined close (); };dictionary {
NotificationOptions NotificationDirection = "auto";
dir DOMString = "";
lang DOMString = "";
body USVString ;
navigate DOMString = "";
tag USVString ;
image USVString ;
icon USVString ;
badge VibratePattern ;
vibrate EpochTimeStamp ;
timestamp boolean =
renotify false ;boolean ?=
silent null ;boolean =
requireInteraction false ;any =
data null ;sequence <NotificationAction >= []; };
actions enum {
NotificationPermission ,
"default" ,
"denied" };
"granted" enum {
NotificationDirection ,
"auto" ,
"ltr" };
"rtl" dictionary {
NotificationAction required DOMString ;
action required DOMString ;
title USVString ;
navigate USVString ; };
icon callback =
NotificationPermissionCallback undefined (NotificationPermission );
permission
非永続的通知は1つのNotification
オブジェクトによって表され、Notification
の
コンストラクタで作成できます。
永続的通知は
0個以上の
Notification
オブジェクトによって表され、
showNotification()
メソッドで作成できます。
3.1. ガベージコレクション
Notification
オブジェクトは、通知リストが対応する通知を
含んでいて、
かつtypeがclick
、show
、close
、error
のいずれかであるイベントリスナーを持つ間は、ガベージコレクトされてはなりません。
3.2. コンストラクタ
new Notification(title, options)
コンストラクタの手順は以下の通りです:
-
thisの関連グローバルオブジェクトが
ServiceWorkerGlobalScope
オブジェクトの場合、 TypeErrorをスローします。 -
options["
actions
"] が空でない場合、 TypeErrorをスローします。 -
notificationを、 設定オブジェクトで通知を作成する手順の title、options、 thisの関連設定オブジェクトを引数として実行した結果とします。
-
thisをnotificationと関連付けます。
-
並行して以下の手順を実行します:
-
通知権限状態を取得する結果が "
granted
"でない場合、 タスクをキューして thisにerror
イベントを発火し、 これらの手順を中止します。 -
notificationについて通知表示手順を実行します。
-
3.3. 静的メンバー
静的permission
ゲッターの手順は、通知の権限状態を取得するの結果を返します。
標準を編集する場合は、上記の内容をコピーしないでください。同期的な権限は同期I/Oと同様に、良くない考え方です。
開発者はPermissionsのquery()
メソッドの利用が推奨されます。[Permissions]
const permission = await navigator.permissions.query({name: "notifications"}); if (permission.state === "granted") { // APIの利用権限があります… }
静的
requestPermission(deprecatedCallback)
メソッドの手順は以下の通りです:
-
globalを現在のグローバルオブジェクトとします。
-
promiseを新しいPromiseとして、thisの関連Realmで生成します。
-
並行して以下の手順を実行します:
-
permissionStateを "notifications"の利用権限を要求する結果とします。
-
DOM操作タスクソース上でglobalに対してグローバルタスクをキューし、以下の手順を実行します:
-
deprecatedCallbackが与えられていれば、コールバック関数を呼び出す (引数は« permissionState »と"
report
")。
-
-
-
promiseを返します。
通知は、現時点で唯一エンドユーザーに最初から尋ねることが理にかなうAPIです。他のAPI仕様はこのパターンを使うべきではなく、 より適切な代替案を採用してください。
静的maxActions
ゲッターの手順は、
サポートされるアクションの最大数を返します。
3.4. オブジェクトメンバー
以下は、イベントハンドラ(および対応する
イベントハンドライベントタイプ)であり、
Notification
オブジェクトの属性としてサポートされなければなりません。
イベントハンドラ | イベントハンドライベントタイプ |
---|---|
onclick
| click
|
onshow
| show
|
onerror
| error
|
onclose
| close
|
title
ゲッターの手順は、
thisのnotificationの
titleを返すことです。
dir
ゲッターの手順は、
thisのnotificationの
directionを返すことです。
lang
ゲッターの手順は、
thisのnotificationの
languageを返すことです。
body
ゲッターの手順は、
thisのnotificationの
bodyを返すことです。
navigate
ゲッターの手順は以下の通りです:
-
thisの notificationの navigation URL が null なら、空文字列を返すこと。
tag
ゲッターの手順は、
thisのnotificationの
tagを返すことです。
image
ゲッターの手順は以下の通りです:
-
thisのnotificationにimage URLがなければ、 空文字列を返すこと。
-
thisのnotificationのimage URLを シリアライズして返すこと。
icon
ゲッターの手順は以下の通りです:
-
thisのnotificationにicon URLがなければ、空文字列を返すこと。
-
thisのnotificationのicon URLを シリアライズして返すこと。
badge
ゲッターの手順は以下の通りです:
-
thisのnotificationにbadge URLがなければ、空文字列を返すこと。
-
thisのnotificationのbadge URLを シリアライズして返すこと。
vibrate
ゲッターの手順は、
thisのnotificationの
vibration
patternを返すことです。
timestamp
ゲッターの手順は、
thisのnotificationの
timestampを返すことです。
renotify
ゲッターの手順は、
thisのnotificationの
renotify
preferenceを返すことです。
silent
ゲッターの手順は、
thisのnotificationの
silent
preferenceを返すことです。
requireInteraction
ゲッターの手順は、
thisのnotificationの
require interaction preferenceを返すことです。
data
ゲッターの手順は、
StructuredDeserialize(thisのnotificationの
data, thisのrelevant Realm)の結果を返すこと。もし例外がスローされた場合は null を返すこと。
actions
ゲッターの手順は以下の通りです:
-
frozenActionsを
NotificationAction
型の空リストとする。 -
thisのnotificationの actionsの各entryについて:
-
actionを新しい
NotificationAction
とする。 -
entryの navigation URL が null でなければ、 action["
navigate
"] に entryの navigation URL を シリアライズして設定する。 -
entryの icon URL が null でなければ、 action["
icon
"] に entryの icon URL を シリアライズして設定する。 -
Object.freeze を action に呼び出して、 スクリプトによる偶発的な変更を防ぐこと。
-
actionを frozenActions に追加する。
-
-
frozenActions から凍結配列を作成した結果を返すこと。
3.5. 例
3.5.1. ページからイベントを利用する
非永続的なNotification
オブジェクトはライフサイクルの中でイベントを発行し、開発者はそれを使って
望ましい動作を生成できます。
エンドユーザーが通知をアクティブ化したとき、click
イベントが発行されます。
var not = new Notification("Gebrünn Gebrünn by Paul Kalkbrenner", { icon: "newsong.svg", tag: "song" }); not.onclick = function() { displaySong(this); };
3.5.2. サービスワーカーからアクションを利用する
永続的通知は
notificationclick
イベントをServiceWorkerGlobalScope
上で発火します。
次の例ではサービスワーカーが「Archive」アクションを持つ通知を1つ表示し、エンドユーザーが 通知からこの一般的なタスク(例えば通知プラットフォームが通知上にボタンを表示する)を ウェブサイトを開かずに実行できるようにします。エンドユーザーは通知本体をアクティブ化して 受信箱を開くこともできます。
self.registration.showNotification("New mail from Alice", { actions: [{action: 'archive', title: "Archive"}] }); self.addEventListener('notificationclick', function(event) { event.notification.close(); if (event.action === 'archive') { silentlyArchiveEmail(); } else { clients.openWindow("/inbox"); } }, false);
3.5.3. tag
メンバーによる複数インスタンスの利用例
ウェブアプリケーションは、エンドユーザーが複数のブラウザタブでメールアプリを開くなど、
しばしば複数インスタンスで同時に動作します。デスクトップは共有リソースなので、
Notifications APIはtag
メンバーを使って
これらのインスタンスが簡単に連携できる仕組みを提供します。
同じ概念イベントを表す通知は同じタグでマークでき、両方が表示される場合でも エンドユーザーは1つの通知だけを受け取ります。
Instance 1 | Instance 2 | // Instance notices there is new mail. | new Notification("New mail from John Doe", | { tag: 'message1' }); | | | // Slightly later, this instance notices | // there is new mail. | new Notification("New mail from John Doe", | { tag: 'message1' });
ユーザーエージェントがここで定義されたアルゴリズムに従う場合、この状況の結果は1つだけの "New mail from John Doe"通知になります。
3.5.4. 単一インスタンスでtag
メンバーを利用する
tag
メンバーはアプリケーションの単一インスタンスでも、通知を最新状態に保つために利用できます。
例えば、AliceがBobとチャットアプリを使っていて、Aliceが離席中にBobが複数メッセージを 送った場合、アプリケーションはAliceが各メッセージごとにデスクトップ通知を受け取らないようにしたいかもしれません。
// Bob says "Hi" new Notification("Bob: Hi", { tag: 'chat_Bob' }); // Bob says "Are you free this afternoon?" new Notification("Bob: Hi / Are you free this afternoon?", { tag: 'chat_Bob' });
この状況の結果は1つだけの通知となり、2つ目の通知が同じタグを持つ最初の通知を
置き換えます。通知がキュー(先入れ先出し)されるプラットフォームでは、
タグを使うことで通知のキュー内位置も保てます。最新通知が先頭に表示されるプラットフォームでは、
close()
メソッドを利用することで同様の結果が得られます。
4. サービスワーカーAPI
dictionary {
GetNotificationOptions DOMString = ""; };
tag partial interface ServiceWorkerRegistration {Promise <undefined >showNotification (DOMString ,
title optional NotificationOptions = {});
options Promise <sequence <Notification >>getNotifications (optional GetNotificationOptions = {}); }; [
filter Exposed =ServiceWorker ]interface :
NotificationEvent ExtendableEvent {(
constructor DOMString ,
type NotificationEventInit );
eventInitDict readonly attribute Notification notification ;readonly attribute DOMString action ; };dictionary :
NotificationEventInit ExtendableEventInit {required Notification ;
notification DOMString = ""; };
action partial interface ServiceWorkerGlobalScope {attribute EventHandler onnotificationclick ;attribute EventHandler onnotificationclose ; };
service worker registrationには、 showNotification()が正常に呼び出されたか (boolean型)が関連付けられており、初期値はfalseです。
これはPush API現行標準のためのインフラです。[PUSH-API]
showNotification(title, options)
メソッドの手順は以下の通りです:
-
globalをthisの関連グローバルオブジェクトとします。
-
promiseを新しいPromiseとして、thisの関連Realmで生成します。
-
thisのactive workerがnullなら、 promiseをTypeErrorでrejectし、promiseを返します。
-
notificationを 設定オブジェクトで通知を作成する手順で title, options, thisの関連設定オブジェクトを渡して作成した結果とします。例外が発生した場合は promiseをその例外でrejectし、promiseを返します。
-
notificationのservice worker registrationを thisに設定します。
-
並行して以下の手順を実行します:
-
通知権限状態を取得する結果が "granted"でない場合、 DOM操作タスクソース上でglobalに対してグローバルタスクをキューし、 promiseをTypeErrorでreject し、これらの手順を中止します。
-
notificationについて通知表示手順を実行します。
-
notificationのservice worker registrationの showNotification()が正常に呼び出されたか をtrueにします。
-
DOM操作タスクソース上でglobalに対してグローバルタスクをキューし、 promiseをundefinedでresolve します。
-
-
promiseを返します。
getNotifications(filter)
メソッドの手順は以下の通りです:
-
globalをthisの関連グローバルオブジェクトとします。
-
originをthisの関連設定オブジェクトの originとします。
-
promiseを新しいPromiseとしてrealmで生成します。
-
並行して以下の手順を実行します:
-
tagをfilter["
tag
"]とします。 -
notificationsを、リストとして、 通知のリスト内で originが originと同一オリジンであり、 service worker registrationがthisであるもの、 かつtagが空文字列でない場合はtagがtagであるもの のすべての通知とします。
-
DOM操作タスクソース上でglobalに対してグローバルタスクをキューし、以下の手順を実行します:
-
objectsをリストとして初期化します。
-
notificationsの各notificationについて、作成順に realmでその通知を表す新しい
Notification
オブジェクトを作成し、objectsに追加します。
-
-
-
promiseを返します。
このメソッドは、新しいNotification
オブジェクトを0個以上返します。返されたオブジェクトは、すでに存在しているNotification
オブジェクトが表すものと同じ
基礎となる通知を表す場合があります。
サービスワーカー通知イベントを発火するには、名前name、notification
notification、オプションの文字列action(デフォルトは空文字列)を受け取り、Fire Functional Eventをname、NotificationEvent
、
notificationのservice worker registration、および次の初期化で実行します:
notification
- 新しい
Notification
オブジェクトでnotificationを表す。 action
- action
notification
ゲッターの手順は、初期化時の値を返すことです。
action
ゲッターの手順は、初期化時の値を返すことです。
次のものは、イベントハンドラ(および対応する
イベントハンドライベントタイプ)であり、
ServiceWorkerGlobalScope
オブジェクトの属性としてサポートされなければなりません:
イベントハンドラ | イベントハンドライベントタイプ |
---|---|
onnotificationclick
| notificationclick
|
onnotificationclose
| notificationclose
|
謝辞
以下の方々に感謝します: Addison Phillips, Aharon (Vladimir) Lanin, Alex Russell, Anssi Kostiainen, Arkadiusz Michalski, Boris Zbarsky, Brady Eidson, David Håsäther, Doug Turner, Drew Wilson, Ehsan Akhgari, Frederick Hirsch, Ian Hickson, Jake Archibald, James Graham, John Mellor, Jon Lee, Jonas Sicking, Kagami Sascha Rosylight, Michael Cooper, Michael Henretty, Michael™ Smith, Michael van Ouwerkerk, Mike Taylor, Nicolás Satragno, Olli Pettay, Peter Beverloo, Philip Jägenstedt, Reuben Morais, Rich Tibbett, Robert Bindar, 박상현 (Sanghyun Park), Simon Pieters, Theresa O’Connor, timeless, および triple-underscore の皆さん、素晴らしい貢献に感謝します。
この現行標準は Anne van Kesteren (Apple, annevk@annevk.nl) によって執筆されています。以前のバージョンは John Gregg (Google, johnnyg@google.com) によって執筆されました。
知的財産権
Copyright © WHATWG (Apple, Google, Mozilla, Microsoft)。この作品は クリエイティブ・コモンズ 表示 4.0 国際ライセンス の下でライセンスされています。その一部がソースコードに組み込まれている場合は、その部分は BSD 3-Clause License の下でライセンスされます。
これは現行標準です。 特許レビュー版を希望される方は 現行標準レビュー草案をご覧ください。