早く流れる川で

雑に書き留めた何か

JavaScript, Notification APIを使ってトースト通知をする

はじめに

トースト通知(バナー通知)を使ってみたい。
C#でやってみたいが、少し調べてみたら面倒そうな印象を受けた(やるならUWPか・・・)。
他に試せるとしたらC#以外に触れている言語だとJavaScriptだ。
初めてのJavaScriptで少しトースト通知に触れた記憶があったのであらためて調べて試した。

動作環境

開発環境

トースト通知を表示するには?

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("通知を拒否した。");
    }

まずは通知の設定を確認しdefaultdeniedなら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となりトースト通知は使えない。
↓設定ダイアログ
f:id:HayaUp:20200418011038j:plain

トースト通知を表示する1、タイトルのみ

    const title         = "Good day!";
    const notification  = new Notification(title);

↓こうなる
f:id:HayaUp:20200418011146j:plain

トースト通知を表示する2、本文(サブタイトルっぽい)を追加

    const title         = "Good day!";
    const options       = { body : "It's a wonderful day!?" };
    const notification  = new Notification(title, options);

↓こうなる
f:id:HayaUp:20200418011212j:plain

トースト通知を表示する3、アイコンを追加

    const title         = "Good day!";
    const options       = {
        body : "It's a wonderful day!?",
        icon : "../Image/Icon/onsen.png"
    };
    const notification  = new Notification(title, options);

↓こうなる
f:id:HayaUp:20200418011225p:plain

iconは.jpgも表示できた。.svgは表示できなかった。
一応・・・options他にもプロパティがある。
※画像はICOOON-MONOさんにあるものを利用した。素敵な画像をありがとうございます!

おまけ1、iconに使う画像は最低でも64pxが良さそう

トースト通知を表示する3、アイコンを追加では32pxを利用したが若干ぼけている。
↓こちらは64px版。見比べてほしい。
f:id:HayaUp:20200418011245p:plain

おまけ2、半角文字だと1行は何文字分か?

34文字だった。
f:id:HayaUp:20200418011259j:plain

うっ、アイコンを設定したら30文字だった。
※bodyも同じ文字数だった。
f:id:HayaUp:20200418013758j:plain

おまけ3、全角文字だと1行は何文字分か?

18文字だった。
f:id:HayaUp:20200418011310j:plain

うぅ、アイコンを設定したら16文字だった。
※bodyも同じ文字数だった。
f:id:HayaUp:20200418013814j:plain

おまけ4、アイコンは何pxから大きくなるのか?

1pxから大きくなる..pngだからだろうか。
.icoなら違う結果かもしれない。

所感

JavaScriptなら簡単にトースト通知が扱えることが分かった。
IEとSafariでは対応していないので注意が必要か。

参考になりました!