接口介绍

构造方法

1
let notification = new Notification(title, options)

参数

title 一定会被显示的通知标题

options|可选

  • dir : 文字的方向;它的值可以是 auto(自动), ltr(从左到右), or rtl(从右到左)
  • lang: 指定通知中所使用的语言。
  • body: 通知中额外显示的字符串
  • tag: 赋予通知一个ID,以便在必要的时候对通知进行刷新、替换或移除。
  • icon: 一个图片的URL,将被用于显示通知的图标。

属性

Notification.permission | 只读

  • 一个用于表明当前通知显示授权状态的字符串。可能的值包括:denied (用户拒绝了通知的显示), granted
    (用户允许了通知的显示), 或 default (因为不知道用户的选择,所以浏览器的行为与 denied 时相同).

方法

Notification.requestPermission()

  • 用于当前页面向用户申请显示通知的权限。这个方法只能被用户行为调用(比如:onclick 事件),并且不能被其他的方式调用。

Notification.onclick

  • 处理 click 事件的处理。每当用户点击通知时被触发。

Notification.onshow

  • 处理 show 事件的处理。当通知显示的时候被触发。

Notification.onerror

  • 处理 error 事件的处理。每当通知遇到错误时被触发。

Notification.onclose

  • 处理 close 事件的处理。当用户关闭通知时被触发。

实例

单一消息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
window.addEventListener('load', function(){
if (window.Notification && window.Notification.permission !== "granted") {
Notification.requestPermission(function(status) {
if (Notification.permission !== status) {
Notification.permission = status;
}
})
}
let button = document.getElementsByTagName('button')[0];

button.addEventListener('click', function(){
// 如果用户同意就创建通知
if(window.Notification.permission === 'granted'){
let n = new Notification("Hi!");
n.onclick = function(){
alert('你点击了通知!');
}
}

// 如果用户没有选择是否通知
// 注:因为在Chrom中我们无法确定permission属性是否有值,因此
// 检查该属性是否是default 是不安全的。
// default 用户还未被询问是否授权,所以通知不会被显示。
// granted 表示之前已经询问过用户,并且用户已经授予了显示通知的权限。
// denied 用户已经明确的拒绝了显示通知的权限。

else if (window.Notification && window.Notification !== 'denied') {
Notification.requestPermission(function(status){
if (Notifacation.permission !== status) {
Notification.permission = status;
}

// 如果用户同意了
if (status === "granted") {
let n = new Notification("hi");
}
// 否则
else {
alert('Hi');
}
});
}
// 如果用户拒绝接受通知
else {
// 我们可以让步使用常规模态的alert
alert("hi");
}
});
})

N条消息(tag属性,只会显示一个,会覆盖)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
window.addEventListener('load', function(){
if (window.Notification && window.Notification.permission !== "granted") {
Notification.requestPermission(function(status) {
if (Notification.permission !== status) {
Notification.permission = status;
}
})
}

let button2 = document.getElementsByTagName('button')[1];
button2.addEventListener('click', function(){
// 如果用户同意通知,尝试通知10次
if (Notification.permission === 'granted') {
for (let index = 0; index < 10; index++) {
// 感谢标记,我们应该只看到内容为 "Hi! 9" 的通知
let n = new Notification("Hi!" + index, {tag: 'soManyNotification'});
}
}
// 如果用户没有同意通知权限
// 有值chrome不能检查permission知否有值
// 所以检查值为default是不安全的
else if (Notification && Notification.permission !== 'denied') {
Notification.requestPermission(function(status){
if (status != Notification.permission) {
Notification.permission = status;
}

// 同意
if (status === 'granted') {
for (let index = 0; index < 10; index++) {
// 感谢标记,我们应该只看到内容为 "Hi! 9" 的通知
let n = new Notification("hi" + index, {tag: 'soManyNotification'})
}
}
// 否则改用alert
else {
alert("hi!");
}
});
}
else {
// 改用alert
alert('Hi!');
}
});
})

[scode type=”blue”]移动端尚未支持[/scode]