0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScriptでブラウザから通知を出す

Posted at

1. やりたいこと

PCブラウザから通知を出したい

2. やり方

Notification APIで通知を出すことができます
https://developer.mozilla.org/ja/docs/Web/API/Notification

2-1. 通知許可を取る

ブラウザはユーザーが通知を許可したページのみ通知を出しますので、最初にrequestPermission()を実行して許可を得る必要があります

javascript
if ("Notification" in window) {
  Notification.requestPermission().then(permission => {
    if (permission === "granted") {
      console.log("通知の許可が得られました");
    }
  })
}

既に許可済みのページの場合はブラウザが覚えていてtrueを返してくれるので、ユーザー自身が毎回許可を求められたりはしませんので、その点は心配要りません

2-2. 通知を出す

new Notificationで通知オブジェクトを新たに作ると通知を表示してくれます

許可が得られていないとエラーになるので、Notification.permissionが"granted"になっているときだけ通知を出すのが良さそうです

javascript
if (Notification.permission === "granted") {
  new Notification(title, {
    body: until,
    tag: String(tag) + until,
    //icon: "/logo192.png",  // 任意でアイコンを設定できます
    requireInteraction: true,
  });
}

2-3. 通知を消す

通知するときに作ったNotificationオブジェクトのclose()メソッドを呼ぶと通知を消すことができます

javascript
let notification;

// 通知を表示する関数
function showNotification(title, until, tag) {
  if (Notification.permission === "granted") {
    notification = new Notification(title, {
      body: until,
      tag: String(tag) + until,
      requireInteraction: true,  // ユーザーの操作まで通知が残る
    });

    // 任意のタイミングで自動的に通知を閉じる例
    setTimeout(() => {
      closeNotification();
    }, 10000); // 10秒後に通知を閉じる
  }
}

// 通知を閉じる関数
function closeNotification() {
  if (notification) {
    notification.close();
    notification = null; // メモリ管理のためにクリア
  }
}

// 使用例
showNotification("お知らせ", "これは通知の内容です", "通知ID");

まとめ

簡単です
レッツトライ

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?