瀏覽器桌面消息通知Notification

起因:在做一些交互式頁面時菱父,如果切換到瀏覽器其他頁面灾螃,或者是縮小了瀏覽器等等凿试,都可能導致忽略了該關注的頁面有新的消息或回調匹舞,所以需要有比較友好的提醒方式(例如有個消息彈窗提示)褐鸥。

解決:Notification 一個H5的新特性,可以實現(xiàn)Web的桌面通知功能赐稽。它生成的消息通知不需要依附某個頁面叫榕,而是依附于瀏覽器,從而可以讓我們不需要停留在頁面上姊舵。

使用桌面通知流程:
1晰绎、檢查瀏覽器是否支持Notification;
2括丁、檢查瀏覽器的通知權限荞下;
3、若沒有權限,先獲取瀏覽器的通知權限锄弱;
4考蕾、創(chuàng)建消息通知;
5会宪、展示消息通知肖卧;
6、設置關閉回調掸鹅;
示例場景:聊天會話塞帐;
預計效果:每次新消息都彈窗提醒,且點擊彈窗可打開對應會話巍沙,關閉該會話所有消息通知葵姥,保留其他會話消息通知;
小坑:Windows上谷歌瀏覽器每次只展示一個彈窗句携,360榔幸、搜狗每次最多展示3個;Mac上谷歌跟360都可展示所有彈窗矮嫉,無搜狗瀏覽器可安裝削咆,不知道效果;
使用示例:

// 消息通知提示音
const notificationAudio = new Audio('https://img-fe.tengzhihh.com/audio/c58fb135c2546f.mp3');
// 消息彈窗數(shù)組
const notificationInstanceArr: Array<{ [propName: string]: number | Notification }> = [];
Function handleNotification () {
// 檢查是否支持
if (!('Notification' in window)) {
    console.log('瀏覽器不支持消息通知');
    return;
}
// 創(chuàng)建配置項
const options = {
    body: '您有新的未讀消息', // 展示內容
    silent: false, // 是否靜音
    lang: 'ZH',
    sticky: true, // 是否粘性展示蠢笋,不輕易被清理
    // renotify: true, // 彈窗內容更新拨齐,是否重新通知,需與tag搭配使用
    requireInteraction: true, // 是否保持昨寞,不自動關閉
};
// 檢查權限是否已獲取 已獲取為granted
if (Notification.permission !== 'granted') {
    // 未允許權限瞻惋,則申請權限
    Notification.requestPermission(function (status) {
      if (status == 'granted') {
        // 創(chuàng)建提醒
        const notification = new Notification('新消息提醒', options);
        // 設置點擊事件
        notification.onclick = function () {
          handleMessageFocus(data);
        };
        // 存儲通知實例,保留最新三個
        if (notificationInstanceArr.length == 3) {
          const instance = notificationInstanceArr.shift()?.instance;
          instance?.close();
        }
        notificationInstanceArr.push({
          id: target.id,
          instance: notification,
        });
        // 播放通知音頻
        notificationAudio?.play();
      }
    });
  } else {
    // 已有權限援岩,重復操作即可
    const notification = new Notification('新消息提醒', options);
    notification.onclick = function () {
      handleMessageFocus(data);
    };
    if (notificationInstanceArr.length == 3) {
      const instance = notificationInstanceArr.shift()?.instance;
      instance?.close();
    }
    notificationInstanceArr.push({
      id: target.id,
      instance: notification,
    });
    notificationAudio?.play();
  }
}

function handleMessageFocus (target) {
    // 可以在這里 根據(jù)新消息target歼狼,處理展示具體會話邏輯
    // ...
    // 展示原有頁面
    window.focus();
    // 刪除點擊的會話通知
    for (let i = 0; i < notificationInstanceArr.length; i++) {
        if (notificationInstanceArr[i].id == target.id) {
          notificationInstanceArr[i].instance.close();
          notificationInstanceArr.splice(i, 1);
          i--;
        }
    }
}

注意:系統(tǒng)設置、瀏覽器設置相關的權限都能導致通知無效享怀,無效時可以優(yōu)先看看權限設置蹂匹。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市凹蜈,隨后出現(xiàn)的幾起案子限寞,更是在濱河造成了極大的恐慌,老刑警劉巖仰坦,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件履植,死亡現(xiàn)場離奇詭異,居然都是意外死亡悄晃,警方通過查閱死者的電腦和手機玫霎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門凿滤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人庶近,你說我怎么就攤上這事翁脆。” “怎么了鼻种?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵反番,是天一觀的道長。 經常有香客問我叉钥,道長罢缸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任投队,我火速辦了婚禮枫疆,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好杏节,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著值依,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谎碍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天洞焙,我揣著相機與錄音蟆淀,去河邊找鬼。 笑死澡匪,一個胖子當著我的面吹牛熔任,可吹牛的內容都是我干的。 我是一名探鬼主播唁情,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疑苔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了甸鸟?” 一聲冷哼從身側響起惦费,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抢韭,沒想到半個月后薪贫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡刻恭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年瞧省,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鞍匾,死狀恐怖交洗,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情橡淑,我是刑警寧澤构拳,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站梳码,受9級特大地震影響隐圾,放射性物質發(fā)生泄漏。R本人自食惡果不足惜掰茶,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一暇藏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧濒蒋,春花似錦盐碱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至围橡,卻和暖如春暖混,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背翁授。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工拣播, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人收擦。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓贮配,卻偏偏與公主長得像,于是被迫代替她去往敵國和親塞赂。 傳聞我的和親對象是個殘疾皇子泪勒,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容