在日常生活裡,無論是手機還是電腦,我們都依賴 作業系統的通知:不用打開通訊 App,就能知道有人傳訊;不用進購物網站,就能知道包裹正在路上。
現在,透過 Notification API,網頁也能主動把重要訊息推送到使用者眼前,不必等他們回到頁面才發現。
這讓 網頁體驗更像原生 App ── 即使頁面沒開著,網站也能透過 作業系統層級的通知中心 傳遞關鍵訊息,達到主動互動與即時提醒。 📣
通知權限對使用者來說是「長期承諾」。一進站就跳,等於把「是否信任你」當成第一印象測驗。這通常會導致大量拒絕,之後就很難再開。正確節奏:
首次造訪(觀望)
↓
完成與通知相關的行為(例:開啟「追蹤出貨狀態」)
↓
顯示解說小面板(說明為何需要通知,可以隨時關閉)
↓
使用者按下「允許」→ 這時才呼叫 requestPermission()
Notification API 有三種權限狀態:
Notification.requestPermission()
才會跳請求通知權限對話框。new Notification()
顯示通知。requestPermission()
不會跳請求通知權限對話框,只能去瀏覽器或系統設定裡重設。常見疑惑:
file://
) 不行。if (!('Notification' in window)) {
console.log('❌ 瀏覽器不支援 Notification API');
} else {
console.log('目前權限:', Notification.permission); // default | granted | denied
}
async function requestNotifyPermission() {
if (Notification.permission === 'default') {
const result = await Notification.requestPermission();
console.log('使用者選擇:', result);
}
}
以下範例會直接顯示 作業系統層級 的通知。若沒看到彈窗:
Notification.permission === 'granted'
;最常見的有:
[200,100,200]
)。if (Notification.permission === 'granted') {
new Notification('包裹正在路上 🚚', {
body: '你買的書已經寄出了,明天送達!',
icon: '/icons/delivery.png',
badge: '/icons/badge.png',
tag: 'order-123',
requireInteraction: true,
});
這個 Demo 只有最簡單的功能:
本範例的重點在於:它不是頁面內的狀態,而是直接進入 OS 通知中心。
document.visibilityState === 'visible'
,建議用 Toast / 紅點 Badge,避免干擾。showNotification()
。本篇 Demo 只展示第二種(最簡單的情況):點擊按鈕或延遲三秒,就會觸發系統通知。
tag
合併同類事件,重要更新時再用 renotify
提醒,避免訊息洗版。actions
、requireInteraction
、badge
),程式需能容忍忽略不支援的欄位。當 Notification 不支援、權限被拒或平台限制時:
document.title = '(1) 你有新訊息'
(記得適時還原)。通常 Notification API 的進階應用會延伸到以下主題:
👉 歡迎追蹤這個系列,我會從 Canvas 開始,一步步帶你認識更多 Web API 🎯