使用 Javascript 實現(xiàn)瀏覽器推送提醒功能的示例
本篇文章內(nèi)容簡單,速讀只需兩三分鐘,通過這兩三分鐘的時間你就可以給自己的網(wǎng)站實現(xiàn)推送提醒的功能
Notification 類
簡單明了,這個類就是負責(zé)推送消息的,只要用戶當(dāng)前沒有關(guān)閉頁面,及時是在使用其他程序,瀏覽器也能夠?qū)⑾⑼扑徒o用戶
請求權(quán)限
我們在手機上都收到過消息推送,在接收推送之前我們會先將消息推送權(quán)限開放給應(yīng)用。在瀏覽器中也一樣,在使用瀏覽器推送之前,需要先獲取權(quán)限
Notification.requestPermission().then(permission => {
console.log(permission)
})
通過 requestPermission 方法可以為當(dāng)前域名請求消息推送的權(quán)限,這個方法可以使用 Promise 語法來實現(xiàn)請求結(jié)果的處理。當(dāng)然,你也可以使用回調(diào)的方式來實現(xiàn)
回調(diào)的參數(shù) permission 表示當(dāng)前請求后用戶的選擇:允許推送 / 不允許推送,它的值也分別有兩個 granted / denied,當(dāng)我們發(fā)現(xiàn)用戶不允許的推送的時候,就可以在回調(diào)中做出相應(yīng)的提示,告訴用戶可能會導(dǎo)致不能及時接收消息,并且告訴用戶如果想要接收消息該如何操作等
查看權(quán)限
由于推送的權(quán)限是基于域名的,因此同一個網(wǎng)站在請求一次權(quán)限后,下一次打開時就不會再次請求,而是直接通過第一次的用戶選擇來決定網(wǎng)站是否能向用戶推送
因此我們就需要能夠獲取到當(dāng)前網(wǎng)站的推送的狀態(tài),可以通過下面的這個屬性來獲取狀態(tài):
Notification.permission
permission 屬性的值有三種:granted - 允許推送;denied - 拒絕推送;default - 還未申請權(quán)限
當(dāng)值為 default 時,我們就可以向用戶請求推送的權(quán)限了
發(fā)起一條推送
const note = new Notification (title, opts)
通過上面的方式可以聲明一條推送,它有兩個參數(shù),第一個參數(shù)是消息的標(biāo)題,這個是必填的一個參數(shù);而通過第二個選填參數(shù),我們則可以實現(xiàn)更多自定義的顯示內(nèi)容:
第二個參數(shù)接收一個對象,它有一下幾個屬性:
- body:推送的主體內(nèi)容
- tag:推送的標(biāo)識,如果我們聲明了多個 Notification,而這些推送的 tag 都相同,則只會推送一次
- icon:需要在推送中顯示的圖標(biāo)的 URL
- data:推送的消息所帶有的數(shù)據(jù)信息,當(dāng)用戶點擊推送窗口時,可以通過這些信息為用戶展示相應(yīng)的內(nèi)容
- requireInteraction:正常情況下,推送發(fā)出后若用戶沒有操作,幾秒后就會消失,而將該屬性設(shè)為 true 則可以讓推送始終維持而不消失,默認值是 false
當(dāng)我們需要自定義推送顯示時長的時候,可以通過最后一個屬性將自動消失關(guān)閉,然后配合 note.close() 和 setTimeout 方法人為控制推送時長
點擊推送事件
既然已經(jīng)可以成功的發(fā)起一條推送,那么該如何監(jiān)聽到用戶是否點擊了這個推送呢?很簡單,通過 onclick 屬性就可以實現(xiàn)
note.onclick = () => {
//在這里實現(xiàn)用戶點擊后的邏輯
}
其他
需要注意的是,并不是所有瀏覽器都支持 Notification,所以在使用前需要先檢測能否使用
或許有的小伙伴會想,這個功能不錯,這樣在手機上也能實現(xiàn)網(wǎng)頁消息推送了。然而很不幸的是,移動端瀏覽器幾乎100%不支持 Notification :(
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
微信小程序使用template標(biāo)簽實現(xiàn)五星評分功能
這篇文章主要為大家詳細介紹了微信小程序使用template標(biāo)簽實現(xiàn)五星評分功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11
關(guān)于獲取DIV內(nèi)部內(nèi)容報錯的原因分析及解決辦法
這篇文章主要介紹了關(guān)于獲取DIV內(nèi)部內(nèi)容報錯的原因分析及解決辦法的相關(guān)資料,需要的朋友可以參考下2016-01-01
一個簡單但常用的javascript表格樣式_鼠標(biāo)劃過行變色 簡潔實現(xiàn)
經(jīng)常性的會需要使用表格顯示一些東西,當(dāng)表格比較大的時候一眼望去腦袋可能會有些暈,經(jīng)常性的因為沒看準(zhǔn)行而出現(xiàn)誤操作,一般解決辦法是交替行變行或者鼠標(biāo)劃過行變色2008-09-09
JS面向?qū)ο缶幊虒崿F(xiàn)的Tab選項卡案例詳解
這篇文章主要介紹了JS面向?qū)ο缶幊虒崿F(xiàn)的Tab選項卡,結(jié)合具體案例形式詳細分析了JS基于面向?qū)ο蟪绦蛟O(shè)計實現(xiàn)Tab選項卡的相關(guān)操作技巧,需要的朋友可以參考下2020-03-03
javascript 具名函數(shù)的四種調(diào)用方式 推薦
看四種方式執(zhí)行結(jié)果沒有區(qū)別。但如果函數(shù)有返回值的話,用new方式調(diào)用時可能會讓你有些失望。2009-07-07
js傳遞數(shù)組參數(shù)到后臺controller的方法
下面小編就為大家分享一篇js傳遞數(shù)組參數(shù)到后臺controller的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03

