JavaScript >> Javascript 文檔 >  >> JavaScript

如何使用 JavaScript 顯示桌面通知

JavaScript Notifications API 使網頁能夠在不同平台上的設備上向用戶顯示消息。即使在用戶切換標籤或移動到另一個應用程序之後,這些通知也會出現。

這些消息(也稱為 system桌面 通知)可用於通知用戶重要事件,例如電子郵件、新社交媒體消息、實時聊天通知、日曆提醒等。您甚至可以使用系統通知發送營銷活動。

在本教程中,我將解釋 Notifications API 在瀏覽器選項卡中打開網站時向用戶顯示消息的基本用法。

瀏覽器支持

Notifications API 是相當新的,它可能不適用於舊瀏覽器。因此,您應該在顯示消息之前明確驗證瀏覽器是否支持 API。您可以通過檢查 window 對像有一個名為 Notification 的屬性 :

if(!window.Notification) {
    console.log('Browser does not support notifications.');
} else {
    // display message here
}

在支持的平台上,顯示桌面通知涉及兩件事:請求權限和創建新通知以顯示給用戶。

請求權限

用戶需要授予當前源權限才能顯示桌面通知。您可以使用 Notification.permission 輕鬆檢查用戶是否已授予顯示系統通知的權限 財產。該屬性有以下可能的值:

  • default - 用戶尚未決定接受來自您網站的通知
  • granted - 用戶已允許您的網站顯示通知
  • denied - 用戶已選擇阻止來自您網站的通知

如果是第一種情況,可以通過requestPermission()向用戶請求權限 通知 API 的方法。它將打開一個對話框,要求用戶允許或阻止來自該站點的通知。一旦用戶做出選擇,該設置將保存在當前會話中。

如果用戶已經拒絕了顯示通知的請求,我們將無能為力。瀏覽器將忽略任何再次顯示通知或請求權限的請求。

if (!window.Notification) {
    console.log('Browser does not support notifications.');
} else {
    // check if permission is already granted
    if (Notification.permission === 'granted') {
        // show notification here
    } else {
        // request permission from user
        Notification.requestPermission().then(function(p) {
           if(p === 'granted') {
               // show notification here
           } else {
               console.log('User blocked notifications.');
           }
        }).catch(function(err) {
            console.error(err);
        });
    }
}

requestPermission() 方法返回一個承諾。一旦 promise 被解決或拒絕(根據用戶選擇通知),回調函數將被調用。

顯示通知

如果用戶選擇接受來自我們網站的通知,您可以使用 Notification() 創建新的桌面通知 構造函數將其顯示給用戶。只需將標題傳遞給構造函數即可創建新通知。

var notify = new Notification('Hi there!');

或者,您還可以傳遞一個選項對象來指定文本方向、正文文本、要顯示的圖標、要播放的通知聲音等等。

var notify = new Notification('Hi there!', {
    body: 'How are you doing?',
    icon: 'https://bit.ly/2DYqRrh',
});

將所有內容放在一起,我們可以創建一個函數,一旦調用就會顯示桌面通知,如果尚未授予權限,則請求權限:

function notifyMe() {
    if (!window.Notification) {
        console.log('Browser does not support notifications.');
    } else {
        // check if permission is already granted
        if (Notification.permission === 'granted') {
            // show notification here
            var notify = new Notification('Hi there!', {
                body: 'How are you doing?',
                icon: 'https://bit.ly/2DYqRrh',
            });
        } else {
            // request permission from user
            Notification.requestPermission().then(function (p) {
                if (p === 'granted') {
                    // show notification here
                    var notify = new Notification('Hi there!', {
                        body: 'How are you doing?',
                        icon: 'https://bit.ly/2DYqRrh',
                    });
                } else {
                    console.log('User blocked notifications.');
                }
            }).catch(function (err) {
                console.error(err);
            });
        }
    }
}

現在我們可以在用戶點擊按鈕時調用上述函數:

<button onclick="notifyMe()">Notify Me</button>

或者,您可以將上述函數綁定到正文 onload 網頁完全加載後將調用的事件:

<!DOCTYPE html>
<html>
<body onload="notifyMe()">
<!-- body content-->
</body>
</html>

結論

這就是使用 JavaScript Notifications API 顯示桌面通知的所有人。這是顯示需要在瀏覽器中打開站點的通知的最簡單方法。以後,我將討論 Notifications API 的更高級用法來發送網絡推送通知 從服務器端。


Tutorial JavaScript 教程
  1. 條件鏈接樣式 React

  2. 我可以在沒有工具欄的情況下使用 CKEditor 嗎?

  3. 50 個有用的 JavaScript 工具

  4. 使用 Amcharts 在生產環境中優化 React App 的大小

  5. 為什麼 MutationObserver 不適用於 FullCalendar 中的標題更改?

  6. 如何在 JavaScript 中合併對象?

  7. Angular 簡介:它是什麼以及為什麼要使用它

  1. 緩存標頭:前端開發人員實用指南

  2. 使用 jQuery UI 的搖晃效果搖晃一切

  3. 任何滑塊 jQuery 插件

  4. 當學校和工作發生衝突時:在完美風暴中倖存

  5. 帶有材質庫的 Angular 14 拖放教程

  6. 使用 Web Speech API 構建語音助手

  7. 多次提取+參數

  1. JavaScript 設計模式:橋

  2. React Hooks 與 Async-Await

  3. 創建 React 搜索欄和內容過濾組件

  4. 電子大冒險:第 41 集:馬爾科