From 5c219fe7d1f58771c8217f6f260f15339cbe92a7 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Fri, 30 Aug 2024 01:08:14 +0900 Subject: [PATCH 1/3] =?UTF-8?q?2024/07/26=20=E6=99=82=E7=82=B9=E3=81=AE?= =?UTF-8?q?=E8=8B=B1=E8=AA=9E=E7=89=88=E3=81=AB=E5=9F=BA=E3=81=A5=E3=81=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- files/ja/web/api/notifications_api/index.md | 40 ++-- .../screen_shot_2019-12-11_at_9.59.14_am.png | Bin 0 -> 24360 bytes .../using_the_notifications_api/index.md | 184 +++++++----------- 3 files changed, 96 insertions(+), 128 deletions(-) create mode 100644 files/ja/web/api/notifications_api/screen_shot_2019-12-11_at_9.59.14_am.png diff --git a/files/ja/web/api/notifications_api/index.md b/files/ja/web/api/notifications_api/index.md index adcf4a871fdcb6..3b8cd40713ca8c 100644 --- a/files/ja/web/api/notifications_api/index.md +++ b/files/ja/web/api/notifications_api/index.md @@ -1,54 +1,56 @@ --- title: 通知 API slug: Web/API/Notifications_API +l10n: + sourceCommit: aa8fa82a902746b0bd97839180fc2b5397088140 --- -{{DefaultAPISidebar("Web Notifications")}}{{AvailableInWorkers}}{{securecontext_header}} +{{DefaultAPISidebar("Web Notifications")}}{{securecontext_header}} {{AvailableInWorkers}} 通知 API を使えば、ウェブページがエンドユーザーに表示するシステム通知を制御できるようになります。これらのシステムは、最上位の閲覧コンテキストのビューポートの外にあるため、ユーザーがタブを切り替えたり、別のアプリに移動していても表示されます。また、この API は既存の通知システムと互換性を持つように設計されているので、異なるプラットフォームでも動作します。 ## 概要と使い方 -対応済みのプラットフォームでは、システム通知を表示するには、一般的に 2 つのことが必要です。まず、ユーザーが現在のオリジンに対してシステム通知を表示する許可を与える必要があります。これは一般的にアプリやサイトが初期化されたとき、 {{domxref("Notification.requestPermission()")}} を使用して行われます。これは、例えばボタンをクリックするなど、ユーザーの操作に反応して行う必要があります。 +対応済みのプラットフォームでは、システム通知を表示するには、一般的に 2 つのことが必要です。まず、ユーザーが現在のオリジンに対してシステム通知を表示する許可を与える必要があります。これは一般的にアプリやサイトが初期化されたとき、 {{domxref("Notification.requestPermission_static", "Notification.requestPermission()")}} メソッドを使用して行われます。 +このメソッドは、例えばユーザーのジェスチャーを処理する場合、マウスクリックを処理する場合などでのみ呼び出すべきです。 ```js -btn.addEventListener("click", function () { +btn.addEventListener("click", () => { let promise = Notification.requestPermission(); // wait for permission }); ``` -これはベストプラクティスで、ユーザーが同意していない通知でユーザーに迷惑をかけるべきではありません。しかし、今後ブラウザーはユーザーの操作から起動されていない通知を明示的に拒否するようになるでしょう。例えば、 Firefox はバージョン 72 からすでにこれを行っています。 - これは以下のようにリクエストダイアログを起動します。 -![](screen_shot_2019-12-11_at_9.59.14_am.png) +![オリジンからの通知を許可するかどうかをユーザーに要求するダイアログボックス。通知を許可しない、または許可するオプションがあります。](screen_shot_2019-12-11_at_9.59.14_am.png) ここでは、ユーザーはこのオリジンからの通知を許可するかどうかを選択できます。一度決定がなされると、現在のセッションの間はその設定が保存されます。 -> [!NOTE] -> Firefox 44 からは、通知と[プッシュ通知](/ja/docs/Web/API/Push_API)の許可が統合されました。通知に許可が与えられれば、プッシュ通知も同時に有効になります。 - -つぎに、新しい通知は {{domxref("Notification.Notification","Notification()")}} コンストラクターを使って作られます。このコンストラクターには、必須の title 引数と、オプションを指定する引数として options オブジェクトを与えることができます。オプションには、テキストの方向、本文テキスト、表示アイコン、通知サウンドなどが指定可能です。 +次に、新しい通知は {{domxref("Notification.Notification","Notification()")}} コンストラクターを使って作られます。このコンストラクターには、必須の title 引数と、オプションを指定する引数として options オブジェクトを与えることができます。オプションには、テキストの方向、本文テキスト、表示アイコン、通知サウンドなどが指定可能です。 さらに、通知 API の仕様には、いくつかの[サービスワーカー API](/ja/docs/Web/API/Service_Worker_API) が定義されており、サービスワーカーが通知を発行できるようになっています。 > [!NOTE] > 自分のアプリでの通知の詳しい使い方については、[通知 API の使用](/ja/docs/Web/API/Notifications_API/Using_the_Notifications_API)を参照してください。 -## 通知インターフェイス +## インターフェイス - {{domxref("Notification")}} - : 通知オブジェクトを定義します。 - -### サービスワーカーの追加要素 - -- {{domxref("ServiceWorkerRegistration")}} - - : {{domxref("ServiceWorkerRegistration.showNotification()")}} および {{domxref("ServiceWorkerRegistration.getNotifications()")}} メソッドが含まれており、通知の表示の制御に使用できます。 -- {{domxref("ServiceWorkerGlobalScope")}} - - : {{domxref("ServiceWorkerGlobalScope.notificationclick_event", "onnotificationclick")}} ハンドラーが含まれており、通知がクリックされた時にカスタム関数を実行させることができるようになります。 - {{domxref("NotificationEvent")}} - - : {{domxref("ExtendableEvent")}} を基本とした、特定の型ののイベントオブジェクトです。すでに実行された通知を表現します。 + - : {{domxref("ServiceWorker")}} の {{domxref("ServiceWorkerGlobalScope")}} に配信された通知イベントを表します。 + +### 他インターフェイスへの拡張 + +- {{domxref("ServiceWorkerGlobalScope/notificationclick_event", "notificationclick")}} イベント + - : 表示された通知をユーザーがクリックすると発生します。 +- {{domxref("ServiceWorkerGlobalScope/notificationclose_event", "notificationclose")}} イベント + - : 表示された通知をユーザーが閉じたときに発生します。 +- {{domxref("ServiceWorkerRegistration.getNotifications()")}} + - : 現在のオリジンから現在のサービスワーカー登録を経由して作成された順番で、通知の一覧を返します。 +- {{domxref("ServiceWorkerRegistration.showNotification()")}} + - : リクエストされたタイトルで通知を表示します。 ## 仕様書 diff --git a/files/ja/web/api/notifications_api/screen_shot_2019-12-11_at_9.59.14_am.png b/files/ja/web/api/notifications_api/screen_shot_2019-12-11_at_9.59.14_am.png new file mode 100644 index 0000000000000000000000000000000000000000..481449437d1a529d66db029ffcc953b3f0c5f150 GIT binary patch literal 24360 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 E4;4J{+yDRo literal 0 HcmV?d00001 diff --git a/files/ja/web/api/notifications_api/using_the_notifications_api/index.md b/files/ja/web/api/notifications_api/using_the_notifications_api/index.md index 08a18a0b0b49b2..94625e7797f048 100644 --- a/files/ja/web/api/notifications_api/using_the_notifications_api/index.md +++ b/files/ja/web/api/notifications_api/using_the_notifications_api/index.md @@ -1,15 +1,17 @@ --- title: 通知 API の使用 slug: Web/API/Notifications_API/Using_the_Notifications_API +l10n: + sourceCommit: aa8fa82a902746b0bd97839180fc2b5397088140 --- -{{APIRef("Web Notifications")}}{{AvailableInWorkers}}{{securecontext_header}} +{{DefaultAPISidebar("Web Notifications")}}{{securecontext_header}} {{AvailableInWorkers}} [通知 API](/ja/docs/Web/API/Notifications_API) は、ウェブページやアプリからシステムレベルでページ外部に表示される通知を送ることを可能にします。これにより、アプリケーションがアイドルやバックグラウンドの状態であっても、アプリからユーザーに情報を送信することができます。この記事では、アプリで API を使用する方法の基本を見ていきます。 一般的にシステム通知とは、オペレーティングシステムの標準的な通知メカニズムを指します。一般的なデスクトップシステムやモバイル端末が、通知を行う方法の実例を思い出しましょう。 -![](android-notification.png) +![デスクトップ通知: To do list via mdn.github.io HEY! Your task "Go shopping" is now overdue](desktop-notification.png) 当然ながらシステム通知の仕組みはプラットフォームやブラウザーによって異なりますが問題はなく、通知 API はほとんどのシステム通知に対して十分な互換性を持つようになっています。 @@ -21,7 +23,7 @@ slug: Web/API/Notifications_API/Using_the_Notifications_API ## 許可の要求 -アプリが通知を送信できるようになる前に、ユーザーはアプリがそれを行う権限を認めなければなりません。これは API がウェブページの外部にあるものと対話しようとする際の一般的な要件です。ユーザは少なくとも 1 回はアプリケーションが通知を送ることを認めなければならず、これによりどのアプリやサイトが通知を表示してよいかをユーザーが制御することができます。 +アプリが通知を送信できるようになる前に、ユーザーはアプリがそれを行う権限を認めなければなりません。これは API がウェブページの外部にあるものと対話しようとする際の一般的な要件です。ユーザーは少なくとも 1 回はアプリケーションが通知を送ることを認めなければならず、これによりどのアプリやサイトが通知を表示してよいかをユーザーが制御することができます。 過去にプッシュ通知が悪用されることがあったため、ウェブブラウザーや開発者はこの問題を緩和するための対策を実装し始めています。通知を表示することの許可を求めるのは、ユーザーの操作 (ボタンをクリックするなど) の反応として行うべきです。ユーザーが同意していない通知でユーザーに迷惑をかけるべきではないので、これはベストプラクティスであるだけでなく、今後ブラウザーはユーザーの操作によって起動されたものではない通知の許可の要求を明示的に拒否するようになるでしょう。例えば、 Firefox はバージョン72からすでにこれを行っており、 Safari もしばらく前からこれを行っています。 @@ -29,7 +31,7 @@ slug: Web/API/Notifications_API/Using_the_Notifications_API ### 現在の許可状態を確認する -読取専用の {{domxref("Notification.permission")}} プロパティの値を調べると、すでに許可を得ているかを確認できます。このプロパティは、3 種類のいずれかの値を取ります。 +読み取り専用の {{domxref("Notification.permission_static", "Notification.permission")}} プロパティの値を調べると、すでに許可を得ているかを確認できます。このプロパティは、3 種類のいずれかの値を取ります。 - `default` - : ユーザーはまだ許可を求められたことがなく、したがって通知は表示されない。 @@ -40,10 +42,10 @@ slug: Web/API/Notifications_API/Using_the_Notifications_API ### 許可を得る -通知を表示する許可をまだ得ていない場合は、アプリケーションは {{domxref("Notification.requestPermission()")}} メソッドを使用してユーザーに要求する必要があります。もっとも簡単な形では、次のようなものがあります。 +通知を表示する許可をまだ得ていない場合は、アプリケーションは {{domxref("Notification.requestPermission_static", "Notification.requestPermission()")}} メソッドを使用してユーザーに要求する必要があります。もっとも簡単な形では、次のようなものがあります。 ```js -Notification.requestPermission().then(function (result) { +Notification.requestPermission().then((result) => { console.log(result); }); ``` @@ -51,11 +53,16 @@ Notification.requestPermission().then(function (result) { これはメソッドのプロミスベースの版を使用しています。古いバージョンに対応したい場合は、次のように古いコールバック版を使用する必要があります。 ```js -Notification.requestPermission(); +Notification.requestPermission((result) => { + console.log(result); +}); ``` コールバック版はオプションで、ユーザーが表示を許可する要求に答えた時に呼び出されるコールバック関数を受け入れます。 +> [!NOTE] +> `Notification.requestPermission` がプロミスベース版に対応しているかどうかを、確実に機能テストする方法はありません。古いブラウザーの対応が必要な場合は、コールバック版を使用してください。非推奨ではありますが、新しいブラウザーでも動作します。詳しくは、[ブラウザー互換性表](/ja/docs/Web/API/Notification/requestPermission_static#ブラウザーの互換性)を参照してください。 + ### 例 To-do リストのデモでは、 "Enable notifications" ボタンを配置し、押されたときにアプリの通知を要求します。 @@ -68,62 +75,23 @@ To-do リストのデモでは、 "Enable notifications" ボタンを配置し ```js function askNotificationPermission() { - // function to actually ask the permissions - function handlePermission(permission) { - // set the button to shown or hidden, depending on what the user answers - if ( - Notification.permission === "denied" || - Notification.permission === "default" - ) { - notificationBtn.style.display = "block"; - } else { - notificationBtn.style.display = "none"; - } - } - - // Let's check if the browser supports notifications + // Check if the browser supports notifications if (!("Notification" in window)) { console.log("This browser does not support notifications."); - } else { - if (checkNotificationPromise()) { - Notification.requestPermission().then((permission) => { - handlePermission(permission); - }); - } else { - Notification.requestPermission(function (permission) { - handlePermission(permission); - }); - } + return; } + Notification.requestPermission().then((permission) => { + // set the button to shown or hidden, depending on what the user answers + notificationBtn.style.display = permission === "granted" ? "none" : "block"; + }); } ``` -最初に 2 番目のメインブロックを見てみると、まず最初に通知に対応しているかどうかチェックしているのが分かります。もし対応していれば、次に `Notification.requestPermission()` のプロミスベース版に対応しているかどうかチェックします。対応している場合は、プロミスベース版 (Safari 以外で対応) を実行し、対応していない場合は古いコールバックベース版 (Safari で対応) を実行します。 +最初に 2 番目のメインブロックを見てみると、まず最初に通知に対応しているかどうかチェックしているのが分かります。もしそうであれば、プロミスベース版の `Notification.requestPermission()` を実行し、そうでない場合は、コンソールにメッセージをログ出力します。 -コードの重複を避けるために、このスニペットの最初のメインブロックである `handlePermission()` 関数の中に、多少のハウスキーピングコードを格納しています。この内部では、 `Notification.permission` の値を明示的に設定し (古いバージョンの Chrome では自動的に設定できないものがありました)、ユーザーが許可ダイアログで選択した内容に応じてボタンを表示・非表示にしています。すでに許可されている場合は表示したくありませんが、ユーザーが許可を拒否することを選択した場合は、後で変更できるようにしたいと考えています。 +`then` に渡されるプロミス解決ハンドラー内で、ユーザーが権限ダイアログで選んだ内容に応じてボタンの表示・非表示を切り替えます。すでにその権限が許可されている場合はボタンを表示させたくありませんが、ユーザーが権限を拒否するよう選んだ場合は、後で考えを変えるチャンスを与えるべきです。 -> [!NOTE] -> バージョン 37 より前の Chrome では、 {{domxref("Notification.requestPermission()")}} を `load` イベントのハンドラー内で呼び出すことを許可していませんでした ([issue 274284](https://bugs.chromium.org/p/chromium/issues/detail?id=274284) をご覧ください)。 - -### requestPermission() プロミスの機能検出 - -前に、ブラウザーがプロミス版の `Notification.requestPermission()` に対応しているかどうかをチェックする必要があると言いました。これは以下のようにして行います。 - -```js -function checkNotificationPromise() { - try { - Notification.requestPermission().then(); - } catch (e) { - return false; - } - - return true; -} -``` - -基本的には、 `.then()` メソッドが `requestPermission()` で利用できるかどうかを確認します。成功した場合は `true` を返します。失敗した場合は、 `false` を `catch() {}` ブロック内で返します。 - -

通知の作成

+## 通知の作成 通知の作成は簡単です。 {{domxref("Notification")}} コンストラクターを使用するだけです。このコンストラクターは通知内に表示するタイトルと、通知を拡張するためのアイコン ({{domxref("Notification.icon","icon")}}) やテキスト本文 ({{domxref("Notification.body","body")}}) などのオプションを受け取ります。 @@ -131,7 +99,7 @@ function checkNotificationPromise() { ```js const img = "/to-do-notifications/img/icon-128.png"; -const text = 'HEY! Your task "' + title + '" is now overdue.'; +const text = `HEY! Your task "${title}" is now overdue.`; const notification = new Notification("To do list", { body: text, icon: img }); ``` @@ -141,7 +109,7 @@ const notification = new Notification("To do list", { body: text, icon: img }); ```js const n = new Notification("My Great Song"); -document.addEventListener("visibilitychange", function () { +document.addEventListener("visibilitychange", () => { if (document.visibilityState === "visible") { // The tab has become visible so clear the now-stale Notification. n.close(); @@ -181,86 +149,84 @@ Notifications API の仕様では、{{domxref("Notification")}} のインスタ 以下の基本的な HTML を想定してください。 ```html - + +
+``` + +```css hidden +#demo-logs { + width: 90%; + height: 100px; + background-color: #ddd; + overflow-x: auto; +} ``` 以下の方法で、複数の通知を扱うことが可能です。 ```js -window.addEventListener("load", function () { - const button = document.getElementsByTagName("button")[0]; - - if (window.self !== window.top) { - // Ensure that if our document is in a frame, we get the user - // to first open it in its own tab or window. Otherwise, it - // won't be able to request permission to send notifications. - button.textContent = "View live result of the example code above"; - button.addEventListener("click", () => window.open(location.href)); - return; - } +const demoLogs = document.querySelector("#demo-logs"); + +window.addEventListener("load", () => { + const button = document.querySelector("#notify"); - button.addEventListener("click", function () { - // If the user agreed to get notified - // Let's try to send ten notifications - if (window.Notification && Notification.permission === "granted") { + button.addEventListener("click", () => { + if (Notification?.permission === "granted") { + demoLogs.innerText += `The site has permission to show notifications. Showing notifications.\n`; + // If the user agreed to get notified + // Let's try to send ten notifications let i = 0; // Using an interval cause some browsers (including Firefox) are blocking notifications if there are too much in a certain time. - const interval = window.setInterval(function () { - // Thanks to the tag, we should only see the "Hi! 9" notification - const n = new Notification("Hi! " + i, { tag: "soManyNotification" }); - if (i++ == 9) { - window.clearInterval(interval); + const interval = setInterval(() => { + // Thanks to the tag, we should only see the "Hi no 9 from MDN." notification + const n = new Notification(`Hi no ${i} from MDN.`, { + tag: "soManyNotification", + }); + if (i === 9) { + clearInterval(interval); } + i++; }, 200); - } - - // If the user hasn't told if they want to be notified or not - // Note: because of Chrome, we are not sure the permission property - // is set, therefore it's unsafe to check for the "default" value. - else if (window.Notification && Notification.permission !== "denied") { - Notification.requestPermission(function (status) { + } else if (Notification && Notification.permission !== "denied") { + demoLogs.innerText += "Requesting notification permission.\n"; + // If the user hasn't told if they want to be notified or not + // Note: because of Chrome, we are not sure the permission property + // is set, therefore it's unsafe to check for the "default" value. + Notification.requestPermission().then((status) => { // If the user said okay if (status === "granted") { + demoLogs.innerText += + "User granted the permission. Sending notifications.\n"; let i = 0; // Using an interval cause some browsers (including Firefox) are blocking notifications if there are too much in a certain time. - const interval = window.setInterval(function () { + const interval = setInterval(() => { // Thanks to the tag, we should only see the "Hi! 9" notification - const n = new Notification("Hi! " + i, { + const n = new Notification(`Message no ${i} from MDN.`, { tag: "soManyNotification", }); - if (i++ == 9) { - window.clearInterval(interval); + if (i === 9) { + clearInterval(interval); } + i++; }, 200); - } - - // Otherwise, we can fallback to a regular modal alert - else { - alert("Hi!"); + } else { + // Otherwise, we can fallback to a regular modal alert + demoLogs.innerText += `User denied the permission request.\n`; } }); - } - - // ユーザが通知を拒否している場合 - else { - // 通常型の alert にフォールバックできます - alert("Hi!"); + } else { + // If the user refuses to get notified, we can fallback to a regular modal alert + demoLogs.innerText += `The site does not have permission to show notifications.\n`; } }); }); ``` -結果は以下のとおりです。 - -{{ EmbedLiveSample('Tag_example', '100%', 30) }} - -## 仕様書 - -{{Specifications}} +### 結果 -## ブラウザーの互換性 +{{ EmbedLiveSample('Tag_example', '100%', 150) }} -{{Compat}} +上記の例をテストするには、ウェブサイト `https://live.mdnplay.dev` の[通知設定](https://support.mozilla.org/en-US/kb/firefox-page-info-window#w_permissions)を変更してください。。 ## 関連情報 From f8d61c21b7dbff4c3e0349a55cd72e6fd9402407 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Fri, 30 Aug 2024 01:30:24 +0900 Subject: [PATCH 2/3] Update index.md --- .../api/notifications_api/using_the_notifications_api/index.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/files/ja/web/api/notifications_api/using_the_notifications_api/index.md b/files/ja/web/api/notifications_api/using_the_notifications_api/index.md index 94625e7797f048..13d3e131fd26fe 100644 --- a/files/ja/web/api/notifications_api/using_the_notifications_api/index.md +++ b/files/ja/web/api/notifications_api/using_the_notifications_api/index.md @@ -60,8 +60,7 @@ Notification.requestPermission((result) => { コールバック版はオプションで、ユーザーが表示を許可する要求に答えた時に呼び出されるコールバック関数を受け入れます。 -> [!NOTE] -> `Notification.requestPermission` がプロミスベース版に対応しているかどうかを、確実に機能テストする方法はありません。古いブラウザーの対応が必要な場合は、コールバック版を使用してください。非推奨ではありますが、新しいブラウザーでも動作します。詳しくは、[ブラウザー互換性表](/ja/docs/Web/API/Notification/requestPermission_static#ブラウザーの互換性)を参照してください。 +> **メモ:** `Notification.requestPermission` がプロミスベース版に対応しているかどうかを、確実に機能テストする方法はありません。古いブラウザーの対応が必要な場合は、コールバック版を使用してください。非推奨ではありますが、新しいブラウザーでも動作します。詳しくは、[ブラウザー互換性表](/ja/docs/Web/API/Notification/requestPermission_static#ブラウザーの互換性)を参照してください。 ### 例 From 0bb325ee8faae1a4e63255afa1925111c29e65db Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 31 Aug 2024 00:37:10 +0900 Subject: [PATCH 3/3] Update screen_shot_2019-12-11_at_9.59.14_am.png --- .../screen_shot_2019-12-11_at_9.59.14_am.png | Bin 24360 -> 9000 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/files/ja/web/api/notifications_api/screen_shot_2019-12-11_at_9.59.14_am.png b/files/ja/web/api/notifications_api/screen_shot_2019-12-11_at_9.59.14_am.png index 481449437d1a529d66db029ffcc953b3f0c5f150..17251c2ec673122b8afacef7c37a3b448fd91cae 100644 GIT binary patch literal 9000 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 literal 24360 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 E4;4J{+yDRo