如何使用 JavaScript 显示桌面通知

2025-05-24

如何使用 JavaScript 显示桌面通知

这篇文章最初发表在attacomsian.com/blog上。


JavaScript 通知 API 使网页能够向跨平台用户显示消息。即使用户切换标签页或转到其他应用程序,这些通知仍会显示。

这些消息(也称为系统桌面通知)可用于通知用户重要事件,例如电子邮件、新的社交媒体消息、实时聊天通知、日历提醒等。您甚至可以使用系统通知来发送营销活动。

在本教程中,我将解释通知 API 的基本用法,以便在浏览器选项卡中打开网站时向用户显示消息。

API 使用

通知 API 相对较新,可能无法在旧版浏览器上运行。因此,在显示通知消息之前,您应该明确验证浏览器是否支持该 API。您可以通过检查window对象是否具有名为 的属性来验证Notification

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

在受支持的平台上,显示桌面通知涉及两件事:请求权限和创建新通知显示给用户。

注意:通知 API 要求您的网站使用 SSL 证书。它不适用于不安全的来源(HTTP)。

请求许可

用户需要授予当前源权限才能显示桌面通知。您可以使用属性轻松检查用户是否已授予显示系统通知的权限Notification.permission。此属性具有以下可能的值:

  • default- 用户尚未决定接受来自您网站的通知
  • granted- 用户已允许您的网站显示通知
  • denied- 用户已选择阻止来自您网站的通知

如果是第一种情况,您可以使用 Notifications API 的方法向用户请求权限requestPermission()。它会打开一个对话框,询问用户允许或阻止来自此网站的通知。用户做出选择后,该设置将保存在当前会话中。

如果用户已经拒绝了显示通知的请求,我们就无能为力了。浏览器将忽略任何显示通知的请求或再次请求权限。

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);
        });
    }
}
Enter fullscreen mode Exit fullscreen mode

requestPermission()方法返回一个promise。一旦该 promise 被解决或被拒绝(根据用户选择通知),回调函数将被调用。

显示通知

如果用户选择接受我们网站的通知,您可以使用Notification()构造函数创建一个新的桌面通知,并将其显示给用户。只需将标题传递给构造函数即可创建新的通知。

var notify = new Notification('Hi there!');
Enter fullscreen mode Exit fullscreen mode

或者,您还可以传递选项对象来指定文本方向、正文、要显示的图标、要播放的通知声音等。

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

综合以上所有,我们可以创建一个函数,一旦调用该函数就会显示桌面通知,如果尚未授予权限则请求权限:

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);
            });
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

现在我们可以在用户点击按钮时调用上述函数:

<button onclick="notifyMe()">Notify Me</button>
Enter fullscreen mode Exit fullscreen mode

或者,您可以将上述函数绑定到 bodyonload事件,该事件将在网页完全加载后调用:

<!DOCTYPE html>
<html>
<body onload="notifyMe()">
<!-- body content-->
</body>
</html>
Enter fullscreen mode Exit fullscreen mode

✌️ 我撰写有关现代 JavaScript、Node.js、Spring Boot以及所有Web 开发方面的文章。订阅我的新闻通讯,每周获取 Web 开发教程和专业技巧。


喜欢这篇文章吗? 请在 Twitter 上关注 @attacomsian。你也可以在LinkedInDEV上关注我。

文章来源:https://dev.to/attacomsian/how-to-show-desktop-notifications-using-javascript-5aco
PREV
构建生产环境前要做的 5 件事。(React JS)
NEXT
JavaScript 调试权威指南 [2021 版] 简介 今天我们要调试什么? 了解源码面板 设置断点 单步执行源代码 检查作用域、调用堆栈和值 观察禁用和移除断点 最后修复 使用 Visual Studio Code 调试 JavaScript 理解调试器面板 快速演示 总结