HTML5中的Web Notification桌面通知API使用

本文介绍HTML5中的WebNotification桌面通知功能,包括传统通知方法的不足之处及如何利用HTML5实现跨浏览器的消息提醒。涵盖Notification API的基本用法、权限管理及事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTML5中的Web Notification桌面通知:
1.传统的通知实现
1.1 在以前,我们的通知实现主要是通过闪烁页面的标题内容来实现,实现原理其实很简单,就是定时器不断修改document.title的值。
        var pageTitle = '聊天页面';
        var flag = '【你有新消息】';
        setInterval(function() {
            var title = document.title;
            if (isShine == true) {
                if (title == flag) {
                    document.title = '【         】';
                } else {
                    document.title = flag;
                }
            } else {
                document.title = pageTitle;
            }
        }, 500);
知识点:
Chrome和FireFox浏览器获得焦点和失去焦点方法:
window.onfocus = function() { };
window.onblur = function() { };
// for IE
document.onfocusin = function() { };
document.onfocusout = function() { };   document.onfocusout = function() { };
1.2 缺陷:用户的浏览器要一直是张开的。用户浏览器最小化,标题就看不见,无法及时get到有新消息的信息
2. HTML5 Web Notification桌面通知特点:
2.1 HTML5 Web Notification通知是属于桌面性质的通知,有点类似于显示器右下角蹦出的QQ弹框,杀毒提示之类的,跟浏览器是脱离的,消息是置顶的。
2.2 兼容性:IE14+(Edge),FireFox46+,Chrome29+,safari9.1+opera38+;

3. HTML5 Web Notification语法(window.Notification)
3.1 Notification.requestPermission(),这是一个静态方法,作用就是让浏览器出现是否允许通知的提示,

下面这个是最近规范上更新的基于promise的语法:

Notification.requestPermission().then(function(permission) { ... });

Notification.requestPermission().then(function(result) {
    // result可能是是granted, denied, 或default.
});

下面这个是基于简单的回调:

Notification.requestPermission(callback);

无论是then中的还是直接callback函数的参数都是一样的,表示当前是否允许。只会是granted, denied, 或default.其中granted表示用户允许通知,denied表示用户嫌弃你,default表示用户目前还没有操作。

3.2 Notification.permission[只读]

这是一个静态属性。表示是否允许通知,值就是上面的granted, denied, 或default。默认情况下,Notification.permission的值是’default’。
因此,Notification.requestPermission()的回调方法中,可以不使用result参数,直接使用Notification.permission获取当前的通知状态。

3.3 new Notification(title, options)

获取用户授权之后,就可以推送通知了。
var notification = new Notification(title, options);
通过new构造,显示推送通知。其中title是必须参数,表示通知小框框的标题内容,options是可选参数,对象,支持的参数以及释义见下表:

属性名释义
dir文字的方向;它的值可以是 auto(自动), ltr(从左到右), or rtl(从右到左)
lang指定通知中所使用的语言。这个字符串必须在 BCP 47 language tag 文档中是有效的。
body提示主体内容,字符串,会在标题的下面显示。
tag代表通知的一个识别标签,相同tag时只会打开同一个通知窗口。
icon字符串,要在通知中显示的图标的URL。
3.4 Notification实例属性值

Notification实例属性值的基本上和上面的options参数一致,返回的值也是options和默认值的合并值(如果浏览器支持的话)。

属性释义
Notification.title[只读]通知框的标题内容
Notification.dir[只读]默认值是auto
Notification.lang[只读]提示的语言
Notification.body[只读]提示主体内容
Notification.tag[只读]字符串。标记当前通知的标签。
Notification.icon[只读]字符串。通知面板左侧那个图标地址
3.5 Notification实例方法
方法释义
Notification.close()用于关闭通知。通知如果你放着不管,一段时间后就会自动隐藏,大概30s左右。
3.6 事件处理
事件释义
Notification.onclick点击通知事件
Notification.onerror通知显示异常事件
Notification.onclose通知关闭事件,无论是用户手动关闭,还是直接Notification.close()关闭都会触发该该事件。
Notification.onshow通知显示事件

4.实例
HTML代码:

<button id="button">发送消息</button>
<p id="text"></p>

JS代码:

if (window.Notification) {
    var button = document.getElementById('button'), text = document.getElementById('text');
    var popNotice = function() {
        if (Notification.permission == "granted") {
            var notification = new Notification("Hi,你好:", {
                body: '好友添加请求',
                icon: '/logo.jpg'
            });
            notification.onclick = function() {
                text.innerHTML = '张三于' + new Date().toTimeString().split(' ')[0]+'加你为好友!';
                notification.close();
            };
        }
    };
    button.onclick = function() {
        if (Notification.permission == "granted") {
            popNotice();
        } else if (Notification.permission != "denied") {
            Notification.requestPermission(function (permission) {
                popNotice();
            });
        }
    };
} else {
    alert('浏览器不支持Notification');
}
<think>好的,我现在需要帮助用户了解如何在HTML5中实现Web Notification桌面通知功能。首先,我得回忆一下相关的知识,并结合用户提供的引用内容来组织答案。用户提到的引用1到4都涉及Web Notification的基本概念、API使用和示例,所以应该围绕这些内容展开。 首先,用户想知道如何实现右下角的桌面提示,也就是使用Web Notifications API。根据引用3,Notification是一个函数,具有静态属性和方法。引用2提到API的工作原理,需要用户授权,然后创建通知实例。引用4中的例子可能对代码结构有帮助。 我需要分步骤说明实现流程。第一步是请求权限,因为浏览器需要用户同意才能显示通知。这里要用到Notification.requestPermission()方法,可能返回granted、denied或default状态。然后,创建通知实例,设置标题、内容、图标等选项,如引用2和3所述。 接下来,需要处理兼容性问题,因为不同浏览器可能有不同的实现,比如前缀问题。比如,在旧版浏览器中可能需要检查webkitNotifications,但根据引用3,用户说不考虑私有前缀,所以可能只需检查window.Notification是否存在。 然后,给出一个完整的示例代码,包括请求权限和触发通知的函数。可能需要事件监听,比如点击按钮触发通知,这样用户可以在实际场景中调用。同时,要注意通知的关闭时间,可能需要setTimeout自动关闭,或者让用户手动关闭。 另外,引用4提到微信和奥运网页的例子,说明实际应用场景,可以在注意事项里提到这些用例,比如用户非活跃时也能接收通知,增强用户参与度。 可能还需要提到高级配置,如振动、声音、交互事件(点击通知跳转页面),如引用2中的内容。同时,安全限制,比如必须在HTTPS环境下或本地localhost才能使用API,这是现代浏览器的常见要求。 最后,生成相关问题,帮助用户进一步学习,比如如何自定义样式、处理权限拒绝、兼容性处理等,这些是用户可能遇到的后续问题。 现在整理结构,确保步骤清晰,代码正确,语法符合要求。使用$...$和$$...$$格式,但数学公式可能不多,主要代码示例。检查LaTeX是否正确,比如变量用$包裹,但代码块用反引号。使用中文回答,分步骤说明,引用对应的参考文献,例如权限请求部分引用3和4,创建通知引用2和3。 需要确保代码示例正确,比如使用new Notification(),并处理权限请求的异步回调。可能使用Promise或者回调函数,根据浏览器支持情况。现代浏览器支持Promise,所以示例中使用.then()方法更合适。 最后,验证所有引用标记是否正确添加,比如在提到权限请求时引用[^3],在API工作原理时引用[^2],在应用场景时引用[^4]和[^1]。</think>以下是HTML5 Web Notifications桌面通知功能的实现指南: ### 一、实现步骤 1. **权限请求** 浏览器要求必须先获取用户授权(默认禁止弹窗),通过`Notification.requestPermission()`实现异步请求[^3]: ```javascript Notification.requestPermission().then(permission => { if (permission === 'granted') { console.log('已获得通知权限'); } }); ``` 2. **创建通知实例** 通过`new Notification()`构造函数创建通知对象,支持配置参数[^2][^4]: ```javascript function showNotification() { const notification = new Notification('新消息提醒', { body: '您有3条未读消息', icon: 'notification-icon.png', vibrate: [200,100,200], // 振动模式 data: { url: 'https://example.com' } }); // 自动关闭设置 setTimeout(notification.close.bind(notification), 5000); // 点击跳转 notification.onclick = event => { window.open(event.target.data.url, '_blank'); }; } ``` ### 二、完整示例代码 ```html <button onclick="requestPermission()">启用通知</button> <button onclick="showNotification()">测试通知</button> <script> function requestPermission() { if (!("Notification" in window)) { alert("当前浏览器不支持桌面通知"); return; } Notification.requestPermission().then(permission => { if (permission === 'granted') { console.log('权限已授予'); } }); } function showNotification() { if (Notification.permission !== 'granted') return; new Notification('会议提醒', { body: '下午2点产品评审会', icon: '/images/calendar.png', image: '/images/meeting.jpg', badge: '/badge.png', timestamp: Date.now() + 3600000, data: { meetingId: 123 } }); } </script> ``` ### 三、核心配置参数 | 参数 | 说明 | 示例值 | |-------------|-----------------------------|--------------------------| | body | 通知正文内容 | "库存更新完成" | | icon | 显示在通知左侧的图标URL | "/icons/alert.png" | | image | 大图预览(部分浏览器支持) | "/previews/update.jpg" | | vibrate | 设备振动模式(移动端支持) | [200,100,200] | | silent | 是否静音 | true | | requireInteraction | 是否保持显示直到用户操作 | true | ### 四、注意事项 1. **安全限制**:必须通过HTTPS协议或localhost访问才能使用该功能[^2] 2. **生命周期**:默认4秒后自动关闭,可通过`requireInteraction:true`保持显示 3. **频率限制**:浏览器会阻止频繁的重复通知(通常每分钟最多1次)[^4] 4. **多平台支持**:移动端显示样式由操作系统决定,部分配置可能不生效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值