使用 Javascript 實(shí)現(xiàn)瀏覽器推送提醒功能

本篇文章內(nèi)容簡(jiǎn)單确徙,速讀只需兩三分鐘醒串,通過(guò)這兩三分鐘的時(shí)間你就可以給自己的網(wǎng)站實(shí)現(xiàn)推送提醒的功能

Notification 類(lèi)

簡(jiǎn)單明了执桌,這個(gè)類(lèi)就是負(fù)責(zé)推送消息的,只要用戶(hù)當(dāng)前沒(méi)有關(guān)閉頁(yè)面芜赌,及時(shí)是在使用其他程序仰挣,瀏覽器也能夠?qū)⑾⑼扑徒o用戶(hù)

請(qǐng)求權(quán)限

我們?cè)谑謾C(jī)上都收到過(guò)消息推送,在接收推送之前我們會(huì)先將消息推送權(quán)限開(kāi)放給應(yīng)用缠沈。在瀏覽器中也一樣椎木,在使用瀏覽器推送之前,需要先獲取權(quán)限

Notification.requestPermission().then(permission => {
    console.log(permission)
})

通過(guò) requestPermission 方法可以為當(dāng)前域名請(qǐng)求消息推送的權(quán)限博烂,這個(gè)方法可以使用 Promise 語(yǔ)法來(lái)實(shí)現(xiàn)請(qǐng)求結(jié)果的處理。當(dāng)然漱竖,你也可以使用回調(diào)的方式來(lái)實(shí)現(xiàn)

回調(diào)的參數(shù) permission 表示當(dāng)前請(qǐng)求后用戶(hù)的選擇:允許推送 / 不允許推送禽篱,它的值也分別有兩個(gè) granted / denied,當(dāng)我們發(fā)現(xiàn)用戶(hù)不允許的推送的時(shí)候馍惹,就可以在回調(diào)中做出相應(yīng)的提示躺率,告訴用戶(hù)可能會(huì)導(dǎo)致不能及時(shí)接收消息,并且告訴用戶(hù)如果想要接收消息該如何操作等

查看權(quán)限

由于推送的權(quán)限是基于域名的万矾,因此同一個(gè)網(wǎng)站在請(qǐng)求一次權(quán)限后悼吱,下一次打開(kāi)時(shí)就不會(huì)再次請(qǐng)求,而是直接通過(guò)第一次的用戶(hù)選擇來(lái)決定網(wǎng)站是否能向用戶(hù)推送

因此我們就需要能夠獲取到當(dāng)前網(wǎng)站的推送的狀態(tài)良狈,可以通過(guò)下面的這個(gè)屬性來(lái)獲取狀態(tài):

Notification.permission

permission 屬性的值有三種:granted - 允許推送后添;denied - 拒絕推送;default - 還未申請(qǐng)權(quán)限

當(dāng)值為 default 時(shí)薪丁,我們就可以向用戶(hù)請(qǐng)求推送的權(quán)限了

發(fā)起一條推送

const note = new Notification (title, opts)

通過(guò)上面的方式可以聲明一條推送遇西,它有兩個(gè)參數(shù),第一個(gè)參數(shù)是消息的標(biāo)題严嗜,這個(gè)是必填的一個(gè)參數(shù)粱檀;而通過(guò)第二個(gè)選填參數(shù),我們則可以實(shí)現(xiàn)更多自定義的顯示內(nèi)容:

第二個(gè)參數(shù)接收一個(gè)對(duì)象漫玄,它有一下幾個(gè)屬性:

  1. body:推送的主體內(nèi)容
  2. tag:推送的標(biāo)識(shí)茄蚯,如果我們聲明了多個(gè) Notification,而這些推送的 tag 都相同睦优,則只會(huì)推送一次
  3. icon:需要在推送中顯示的圖標(biāo)的 URL
  4. data:推送的消息所帶有的數(shù)據(jù)信息渗常,當(dāng)用戶(hù)點(diǎn)擊推送窗口時(shí),可以通過(guò)這些信息為用戶(hù)展示相應(yīng)的內(nèi)容
  5. requireInteraction:正常情況下刨秆,推送發(fā)出后若用戶(hù)沒(méi)有操作凳谦,幾秒后就會(huì)消失,而將該屬性設(shè)為 true 則可以讓推送始終維持而不消失衡未,默認(rèn)值是 false

當(dāng)我們需要自定義推送顯示時(shí)長(zhǎng)的時(shí)候尸执,可以通過(guò)最后一個(gè)屬性將自動(dòng)消失關(guān)閉家凯,然后配合 note.close()setTimeout 方法人為控制推送時(shí)長(zhǎng)

點(diǎn)擊推送事件

既然已經(jīng)可以成功的發(fā)起一條推送,那么該如何監(jiān)聽(tīng)到用戶(hù)是否點(diǎn)擊了這個(gè)推送呢如失?很簡(jiǎn)單绊诲,通過(guò) onclick 屬性就可以實(shí)現(xiàn)

note.onclick = () => {
    //在這里實(shí)現(xiàn)用戶(hù)點(diǎn)擊后的邏輯
}

其他

需要注意的是,并不是所有瀏覽器都支持 Notification褪贵,所以在使用前需要先檢測(cè)能否使用

或許有的小伙伴會(huì)想掂之,這個(gè)功能不錯(cuò),這樣在手機(jī)上也能實(shí)現(xiàn)網(wǎng)頁(yè)消息推送了脆丁。然而很不幸的是世舰,移動(dòng)端瀏覽器幾乎100%不支持 Notification :(

掃碼關(guān)注前端周記公眾號(hào)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市槽卫,隨后出現(xiàn)的幾起案子跟压,更是在濱河造成了極大的恐慌,老刑警劉巖歼培,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件震蒋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡躲庄,警方通過(guò)查閱死者的電腦和手機(jī)查剖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)噪窘,“玉大人笋庄,你說(shuō)我怎么就攤上這事【蠹啵” “怎么了无切?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)丐枉。 經(jīng)常有香客問(wèn)我哆键,道長(zhǎng),這世上最難降的妖魔是什么瘦锹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任籍嘹,我火速辦了婚禮,結(jié)果婚禮上弯院,老公的妹妹穿的比我還像新娘辱士。我一直安慰自己,他們只是感情好听绳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布颂碘。 她就那樣靜靜地躺著,像睡著了一般椅挣。 火紅的嫁衣襯著肌膚如雪头岔。 梳的紋絲不亂的頭發(fā)上塔拳,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音峡竣,去河邊找鬼靠抑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛适掰,可吹牛的內(nèi)容都是我干的颂碧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼类浪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼载城!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起费就,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤个曙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后受楼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呼寸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年艳汽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片对雪。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡河狐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瑟捣,到底是詐尸還是另有隱情馋艺,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布迈套,位于F島的核電站捐祠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桑李。R本人自食惡果不足惜踱蛀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贵白。 院中可真熱鬧率拒,春花似錦、人聲如沸禁荒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呛伴。三九已至勃痴,卻和暖如春谒所,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背召耘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工百炬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人污它。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓剖踊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親衫贬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子德澈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容