定義:
瀏覽器提供的一個桌面通知的接口,它是瀏覽器原生的API,掛載在window對象上。
使用:
使用 Notification 來創建一個新通知。
let notification = new Notification(title, options)
參數:
title - 設置顯示通知的標題 (必填, 否則會報錯!)
options - 可選參數
· dir :文字的方向(auto 自動、ltr 從左至右、rtl 從右至左);
· lang :指定通知所用的語言;
· body:通知額外顯示的字符串,也就是正文部分,會在標題下方顯示;
image: 預覽的大圖;
· tag:賦予通知一個ID(唯一的),用於對通知進行刷新、替換或移除(這塊對於多個通知有用),默認爲空,當tag相同時,重複構造實例。新通知會替換就通知,反之,通知不會替換,而是像蓋樓層一樣疊加;
· icon:一個圖片的URL,用於顯示通知圖標;
· requireInteraction : true // 是否一直保持有效(是否一直保持通知的顯示,默認爲false,會自動關閉),設置爲true時,必須由用戶手動關閉或者 調用實例的 notification.close() 方法進行關閉。
· data : 這是一個自定義的屬性,裏邊可以定義一些自己屬性
let niotification = new Notification('title', {
iocn: 'xx',
body: 'this is test',
data: {
url: 'www.baidu.com'
}
})
notification.addEventListener('click', (e) => {
window.open(e.target.data.url, '_blank')
})
屬性
1、靜態屬性(通過構造函數Notification來訪問)
(1)Notification.permission (只讀)
查看一個用於表明當前通知顯示授權狀態的字符串(這個是瀏覽器規定的),一共有三種狀態:
"denied" :用戶拒絕了通知顯示;
"granted" :用戶允許通知顯示;
"default" :相當於一個默認狀態,與 "denied" 狀態相同,拒絕顯示通知, 這個狀態是瀏覽器之前沒有設置過通知,在控制檯輸入Nitification.requsetPermission() 會彈出一個對話框:
我在瀏覽器控制檯打印的授權狀態是默認的,之前沒有設置過:
2、實例屬性
通過實例訪問,其實例屬性都是掛載在Notification原型上的。
以下截圖不完整!
以下6個屬性開篇以講過,不再囉嗦:
共同特點:可在options中設置,只讀。
notice.title、notice.dir、notice.lang、notice.body、notice.tag、notice.icon
3、事件處理函數
(1)notice.onclick - 每當用戶點擊通知是觸發
注意:該方法的默認行爲是將 焦點移到與該通知相關聯的 browsing context 的窗口. 如果你不希望這樣, 可以在 event 對象上調用 preventDefault()
.
(2)notice.onshow - 當通知顯示時觸發( 過時API )
(3)notice.onerror - 當通知遇到錯誤時觸發( 過時API )
(4)notice.onclose - 關閉通知時觸發
let notice = new Notification("title")
notice .onclick = function(e) {
let e = e || window.event
e.preventDefault(); // 阻止默認事件
window.open('http://www.baidu.com', '_blank') // 打開一個新頁面
}
也是在原型上:
方法
1、靜態屬性(通過構造函數Notification來訪問)
Notification.requsetPermission( ) - 用於當前頁面向用戶申請顯示通知權限的方法。這個方法只能用戶行爲調用(如:click事件),不能被其他方式調用!!!
此方法會返回一個Promise對象,所以可以使用await 或 then 方式接收返回結果
Notification.requestPermission()
.then((r) => {
console.log(r) // 'denied'、'default'、'granted'
})
(有三個不同狀態的返回結果:"denied" :表名用戶點擊了禁止顯示通知、"granted":用戶點擊了允許顯示通知 、"default":默認狀態,會彈出以下對話框詢問。)
注:當用戶點擊了允許或者禁止,下次將不再彈出下邊對話框!點擊上邊的 關閉 ,下次還是會彈出此對話框。。。
如果用戶點擊了禁止,以後想獲取到通知的話,需要用戶自行設置,關於如何開啓瀏覽器授權通知請看下https://blog.csdn.net/qq_42778001/article/details/106450669
2、實例方法
通過實例來調用。
(1) notice.close - 關閉一個以前顯示的通知
let notice = new Notification('title')
notice.close()
注:有些瀏覽器會自動關閉彈出的Notication(通知),但有些不是。例如chrome/opera, 所以我們換需要手動關閉。
function sNotification(title, options) {
let opt = options
let n = new Notification(title, opt)
setTimeout(() => {
n.close.bind(n) // 這塊爲了確保close方法綁定在n(實例)上
}, 5 * 1000)
}
基於Notification封裝的桌面消息通知在github上,用着不錯的話,給俺來個star。
https://github.com/lvxingchenGit/HTML5-Notification