// 判斷瀏覽器是否支持Notification
if (window.Notification) {
switch (Notification.permission) {
case 'default':
alert('用戶暫未開啓該網站消息通知');
defaultPermission();
break;
case 'granted':
alert('用戶已開啓該網站消息通知');
showNotification();
break;
case 'denied':
alert('用戶拒絕該網站消息通知');
break;
}
} else {
alert('暫不支持消息通知');
}
function defaultPermission() {
Notification.requestPermission().then(permission => {
switch (permission) {
case 'default':
break;
case 'granted':
showNotification();
break;
case 'denied':
alert('用戶仍是拒絕了該網站消息通知');
break;
}
});
}
function showNotification() {
new Notification('我是消息通知!');
}
複製代碼
注意:若是第一次在域名控制檯中執行上述代碼,會提示你是否開啓通知。若是開啓過,就會自動顯示通知。 javascript
注意:若是以前在域名中禁止消息通知,能夠本身手動在開啓,Notification是不能在禁止狀態下代碼設計開啓消息通知的。 java
用戶拒絕顯示通知:promise
一旦用戶禁止網站顯示通知,網站就不能再請求用戶受權顯示通知,須要用戶去設置中更改。瀏覽器
已谷歌爲例,在瀏覽器設置中,開始添加或者開始網站的消息通知。不一樣的瀏覽器通知設置的地方不太同樣。 bash
// 判斷瀏覽器是否支持Notification
if (window.Notification) {
switch (Notification.permission) {
case 'default':
alert('用戶暫未開啓該網站消息通知');
break;
case 'granted':
alert('用戶已開啓該網站消息通知');
break;
case 'denied':
alert('用戶拒絕該網站消息通知');
break;
}
} else {
alert('暫不支持消息通知');
}
複製代碼
爲了不網站濫用通知擾民,在向用戶顯示通知以前,須要通過用戶贊成。函數
Notification.permission 用於代表當前通知顯示的受權狀態,它有三個值:網站
Notification.requestPermission().then(permission => {
switch (permission) {
case 'default':
alert('用戶關閉了受權');
break;
case 'granted':
alert('用戶贊成受權')
break;
case 'denied':
alert('用戶仍是拒絕了該網站消息通知');
break;
}
});
複製代碼
當Notification.permission爲default的時候,咱們須要使用Notification.requestPermission()來請求用戶權限。 Notification.requestPermission()基於promise語法,then的回調函數參數是用戶權限的狀態Notification.permission的值。
當Notification.permission爲granted時,請求到用戶權限以後,沒必要當即發送通知,能夠在任意時刻,以任意形式來發送通知。ui
onst title = '這是自定義消息通知';
const options = {
body: 'body:字符串。通知的body內容。',
dir: 'auto',
icon: 'http://cdn.duitang.com/uploads/item/201410/21/20141021130151_ndsC4.jpeg'
};
const notification = new Notification(title, options);
複製代碼
Notification的參數:this
1. title:消息通知標題spa
2. options:
const title = '這是自定義消息通知';
const options = {
body: 'body:字符串。通知的body內容。',
dir: 'auto',
icon: 'http://cdn.duitang.com/uploads/item/201410/21/20141021130151_ndsC4.jpeg'
};
const notification = new Notification(title, options);
notification.onclick = e => {
alert(1);
}
notification.onclose = e => {
alert(2);
}
notification.onshow = e => {
alert(3);
}
notification.onerror = e => {
alert(4);
}
複製代碼
<template>
<div>
<button @click="grantedPermission">彈出消息</button>
</div>
</template>
<script type="text/javascript">
export default {
data() {
return {
}
},
created() {
// 判斷瀏覽器是否支持Notification
if (window.Notification) {
switch (Notification.permission) {
case 'default':
this.defaultPermission();
break;
case 'granted':
this.grantedPermission();
break;
case 'denied':
alert('用戶拒絕該網站消息通知');
break;
}
} else {
alert('暫不支持消息通知');
}
},
methods: {
/**
* [defaultPermission 當用戶拒絕消息通知時,能夠詢問用戶是否開啓消息通知]
* @version [1.0]
*/
defaultPermission() {
Notification.requestPermission().then(permission => {
switch (permission) {
case 'default':
break;
case 'granted':
this.grantedPermission();
break;
case 'denied':
alert('用戶仍是拒絕了該網站消息通知');
break;
}
});
},
/**
* [grantedPermission 運行消息通知狀態,能夠向發起消息通知]
*/
grantedPermission() {
const title = '這是自定義消息通知';
const options = {
body: 'body:字符串。通知的body內容。',
dir: 'auto',
icon: 'http://cdn.duitang.com/uploads/item/201410/21/20141021130151_ndsC4.jpeg'
};
const notification = new Notification(title, options);
notification.onclick = e => {
alert(1);
}
notification.onclose = e => {
alert(2);
}
notification.onshow = e => {
alert(3);
}
notification.onerror = e => {
alert(4);
}
}
}
}
</script>
複製代碼
目前Notification除了IE瀏覽器不支持外, 其餘瀏覽器都已支持桌面通知,移動端瀏覽器基本都未支持。