JavaScript, Notification APIを使ってトースト通知をする
はじめに
トースト通知(バナー通知)を使ってみたい。
C#でやってみたいが、少し調べてみたら面倒そうな印象を受けた(やるならUWPか・・・)。
他に試せるとしたらC#以外に触れている言語だとJavaScriptだ。
初めてのJavaScriptで少しトースト通知に触れた記憶があったのであらためて調べて試した。
動作環境
- Web Browser
- Google Chrome
- 81.0.4044.113(Official Build)(64bit)
- Google Chrome
開発環境
- Editor
- Visual Studio Code
- 1.44.1
- Visual Studio Code
トースト通知を表示するには?
Notification
オブジェクトを利用する。
MDNを見れば良いと思うんだ。
Notification APIは使えるか?
if(window.Notification) { console.log("OK"); } else { console.log("NG"); }
通知の設定はどうなっているか?
const permission = Notification.permission; if(permission === "default") { console.log("通知未設定"); } else if(permission === "granted") { console.log("通知を許可した。"); } else if(permission === "denied") { console.log("通知を拒否した。"); }
まずは通知の設定を確認しdefault
やdenied
ならNotification.requestPermission
メソッドを使い、許可を得る。
許可を得ればgranted
になるので、あとはNotification
オブジェクトのインスタンスを作成すればトースト通知が使える。
通知の設定をするには?
Notification.requestPermission((result) => { if(permission === "default") { console.log("通知未設定"); } else if(permission === "granted") { console.log("通知を許可した。"); } else if(permission === "denied") { console.log("通知を拒否した。"); } });
「許可」ボタンを押すとgranted
となり、トースト通知が使える。
「ブロック」ボタンを押すとdenied
、「×」ボタンを押すとdefault
となりトースト通知は使えない。
↓設定ダイアログ
トースト通知を表示する1、タイトルのみ
const title = "Good day!"; const notification = new Notification(title);
↓こうなる
トースト通知を表示する2、本文(サブタイトルっぽい)を追加
const title = "Good day!"; const options = { body : "It's a wonderful day!?" }; const notification = new Notification(title, options);
↓こうなる
トースト通知を表示する3、アイコンを追加
const title = "Good day!"; const options = { body : "It's a wonderful day!?", icon : "../Image/Icon/onsen.png" }; const notification = new Notification(title, options);
↓こうなる
iconは.jpg
も表示できた。.svg
は表示できなかった。
一応・・・options
は他にもプロパティがある。
※画像はICOOON-MONOさんにあるものを利用した。素敵な画像をありがとうございます!
おまけ1、iconに使う画像は最低でも64pxが良さそう
トースト通知を表示する3、アイコンを追加
では32pxを利用したが若干ぼけている。
↓こちらは64px版。見比べてほしい。
おまけ2、半角文字だと1行は何文字分か?
34文字
だった。
うっ、アイコンを設定したら30文字
だった。
※bodyも同じ文字数だった。
おまけ3、全角文字だと1行は何文字分か?
18文字
だった。
うぅ、アイコンを設定したら16文字
だった。
※bodyも同じ文字数だった。
おまけ4、アイコンは何pxから大きくなるのか?
1px
から大きくなる..png
だからだろうか。
.ico
なら違う結果かもしれない。
所感
JavaScriptなら簡単にトースト通知が扱えることが分かった。
IEとSafariでは対応していないので注意が必要か。