Notification API(全面)

定義:

瀏覽器提供的一個桌面通知的接口,它是瀏覽器原生的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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章