亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
什麼是瀏覽器通知API以及它是如何工作的?
如何請(qǐng)求顯示通知的權(quán)限?
如何創(chuàng)建和顯示通知?
即使網(wǎng)頁未處於焦點(diǎn)狀態(tài),我也可以顯示通知嗎?
如何處理通知上的點(diǎn)擊事件?
我可以以編程方式關(guān)閉通知嗎?
所有瀏覽器都支持瀏覽器通知嗎?
我可以自定義通知的外觀嗎?
如何檢查用戶是否已授予顯示通知的權(quán)限?
我可以在工作程序腳本中使用瀏覽器通知API嗎?
首頁 web前端 js教程 使用網(wǎng)絡(luò)通知API顯示動(dòng)態(tài)消息

使用網(wǎng)絡(luò)通知API顯示動(dòng)態(tài)消息

Feb 17, 2025 pm 01:06 PM

Web Notifications API:讓網(wǎng)站通知跳出瀏覽器限制

我們已經(jīng)習(xí)慣了來自喜愛的網(wǎng)站或應(yīng)用程序的手機(jī)通知,但現(xiàn)在瀏覽器直接推送通知也變得越來越普遍。例如,F(xiàn)acebook會(huì)在你有新的好友請(qǐng)求或有人評(píng)論你參與的帖子時(shí)發(fā)送通知;Slack會(huì)在你被提及的對(duì)話中發(fā)送通知。

作為前端開發(fā)者,我很好奇如何利用瀏覽器通知來為那些不處理大量信息流的網(wǎng)站提供服務(wù)。如何根據(jù)訪客對(duì)網(wǎng)站的興趣添加相關(guān)的瀏覽器通知?

本文將演示如何在Concise CSS網(wǎng)站上實(shí)現(xiàn)一個(gè)通知系統(tǒng),以便在每次發(fā)布框架新版本時(shí)提醒訪客。我將展示如何結(jié)合使用localStorage和瀏覽器Notification API來實(shí)現(xiàn)這一目標(biāo)。

Displaying Dynamic Messages Using the Web Notification API

Notification API基礎(chǔ)

首先,我們需要確定訪客的瀏覽器是否支持通知。本教程的大部分工作將由Notification對(duì)象完成。

(function() {
  if ("Notification" in window) {
    // 代碼在此處
  }
})();

目前我們只確定了瀏覽器是否支持通知。確定之後,我們需要知道是否可以向訪客顯示權(quán)限請(qǐng)求。

我們將permission屬性的輸出存儲(chǔ)在一個(gè)變量中。如果權(quán)限已授予或拒絕,則不返回任何內(nèi)容。如果我們之前沒有請(qǐng)求過權(quán)限,則使用requestPermission方法請(qǐng)求權(quán)限。

(function() {
  if ("Notification" in window) {
    var permission = Notification.permission;

    if (permission === "denied" || permission === "granted") {
      return;
    }

    Notification.requestPermission();
  }
})();

Displaying Dynamic Messages Using the Web Notification API

您應(yīng)該會(huì)在瀏覽器中看到類似上圖的提示。

現(xiàn)在我們已經(jīng)請(qǐng)求了權(quán)限,讓我們修改代碼,以便在允許權(quán)限的情況下顯示通知:

(function() {
  if ("Notification" in window) {
    var permission = Notification.permission;

    if (permission === "denied" || permission === "granted") {
      return;
    }

    Notification
      .requestPermission()
      .then(function() {
        var notification = new Notification("Hello, world!");
      });
  }
})();

Displaying Dynamic Messages Using the Web Notification API

雖然簡單,但功能有效。

我們?cè)谶@裡使用requestPermission()方法的基於Promise的語法,在權(quán)限授予後顯示通知。我們使用Notification構(gòu)造函數(shù)顯示通知。此構(gòu)造函數(shù)接受兩個(gè)參數(shù),一個(gè)用於通知標(biāo)題,另一個(gè)用於選項(xiàng)。請(qǐng)參閱文檔鏈接以查找可以傳遞的完整選項(xiàng)列表。

存儲(chǔ)框架版本

前面提到,我們將使用localStorage來幫助顯示通知。使用localStorage是存儲(chǔ)JavaScript中持久客戶端信息的推薦方法。我們將創(chuàng)建一個(gè)名為conciseVersion的localStorage鍵,其中包含框架的當(dāng)前版本(例如1.0.0)。然後,我們可以使用此鍵來檢查框架的新版本。

如何使用最新版本的框架更新conciseVersion鍵的值?我們需要一種方法在有人訪問網(wǎng)站時(shí)設(shè)置當(dāng)前版本。我們還需要在發(fā)布新版本時(shí)更新該值。每次conciseVersion值更改時(shí),都需要向訪客顯示通知,以宣布框架的新版本。

我們將通過向頁面添加一個(gè)隱藏元素來解決此問題。此元素將具有名為js-currentVersion的類,並且只包含框架的當(dāng)前版本。由於此元素存在於DOM中,因此我們可以使用JavaScript輕鬆地與之交互。

此隱藏元素將用於在我們的conciseVersion鍵中存儲(chǔ)框架版本。我們還將使用此元素在發(fā)布框架的新版本時(shí)更新該鍵。

(function() {
  if ("Notification" in window) {
    // 代碼在此處
  }
})();

我們可以使用少量CSS來隱藏此元素:

(function() {
  if ("Notification" in window) {
    var permission = Notification.permission;

    if (permission === "denied" || permission === "granted") {
      return;
    }

    Notification.requestPermission();
  }
})();

注意:由於此元素不包含任何有意義的內(nèi)容,因此屏幕閱讀器無需訪問此元素。這就是為什麼我將aria-hidden屬性設(shè)置為true,並使用display: none作為隱藏元素的方法。有關(guān)隱藏內(nèi)容的更多信息,請(qǐng)參閱此WebAIM文章。

現(xiàn)在我們可以獲取此元素並在JavaScript中與之交互。我們需要編寫一個(gè)函數(shù)來返回我們剛剛創(chuàng)建的隱藏元素內(nèi)的文本。

(function() {
  if ("Notification" in window) {
    var permission = Notification.permission;

    if (permission === "denied" || permission === "granted") {
      return;
    }

    Notification
      .requestPermission()
      .then(function() {
        var notification = new Notification("Hello, world!");
      });
  }
})();

此函數(shù)使用textContent屬性存儲(chǔ).js-currentVersion元素的內(nèi)容。讓我們?cè)偬砑右粋€(gè)變量來存儲(chǔ)conciseVersion localStorage鍵的內(nèi)容。

<span class="js-currentVersion" aria-hidden="true">3.4.0</span>

現(xiàn)在,我們?cè)谝粋€(gè)變量中擁有框架的最新版本,並且我們將localStorage鍵存儲(chǔ)到一個(gè)變量中。是時(shí)候添加確定是否有新版本的框架可用的邏輯了。

我們首先檢查conciseVersion鍵是否存在。如果不存在,我們將向用戶顯示通知,因?yàn)檫@可能是他們第一次訪問。如果鍵存在,我們檢查其值(存儲(chǔ)在currentVersion變量中)是否大於當(dāng)前版本的值(存儲(chǔ)在latestVersion變量中)。如果框架的最新版本大於訪客上次看到的版本,我們就知道已發(fā)布新版本。

注意:我們使用semver-compare庫來處理比較兩個(gè)版本字符串。

知道了這一點(diǎn),我們將向訪客顯示通知並適當(dāng)?shù)馗挛覀兊腸onciseVersion鍵。

[aria-hidden="true"] {
  display: none;
  visibility: hidden;
}

要使用此函數(shù),我們需要修改下面的權(quán)限代碼。

function checkVersion() {
  var latestVersion = document.querySelector(".js-currentVersion").textContent;
}

這允許我們?cè)谟脩糁耙咽谟铏?quán)限或剛剛授予權(quán)限時(shí)顯示通知。

顯示通知

到目前為止,我們只向用戶顯示了不包含太多信息的簡單通知。讓我們編寫一個(gè)函數(shù),允許我們動(dòng)態(tài)創(chuàng)建瀏覽器通知,並控制通知的許多不同方面。

此函數(shù)具有正文文本、圖標(biāo)、標(biāo)題以及可選鏈接和通知持續(xù)時(shí)間的參數(shù)。在內(nèi)部,我們創(chuàng)建一個(gè)選項(xiàng)對(duì)象來存儲(chǔ)我們的通知正文文本和圖標(biāo)。我們還創(chuàng)建Notification對(duì)象的新的實(shí)例,傳入我們的通知標(biāo)題以及選項(xiàng)對(duì)象。

接下來,如果我們想鏈接到我們的通知,我們將添加一個(gè)onclick處理程序。我們使用setTimeout()在指定的時(shí)間後關(guān)閉通知。如果調(diào)用此函數(shù)時(shí)未指定時(shí)間,則使用默認(rèn)的五秒鐘。

(function() {
  if ("Notification" in window) {
    // 代碼在此處
  }
})();

現(xiàn)在,讓我們修改checkVersion()以向用戶顯示更多信息的通知。

(function() {
  if ("Notification" in window) {
    var permission = Notification.permission;

    if (permission === "denied" || permission === "granted") {
      return;
    }

    Notification.requestPermission();
  }
})();

我們使用displayNotification函數(shù)為我們的通知提供描述、圖像、標(biāo)題和鏈接。

注意:我們使用ES6模板字面量將表達(dá)式嵌入到我們的文本中。

完整代碼和測(cè)試

以下是本教程中編寫的完整代碼。

(此處應(yīng)插入CodePen鏈接或完整代碼塊)

運(yùn)行此代碼應(yīng)該會(huì)在您的瀏覽器中生成以下通知。

Displaying Dynamic Messages Using the Web Notification API

為了進(jìn)行測(cè)試,您需要熟悉瀏覽器的通知權(quán)限。以下是管理Google Chrome、Safari、FireFox和Microsoft Edge中通知的一些快速參考。此外,您應(yīng)該熟悉使用開發(fā)者控制臺(tái)來刪除和修改localStorage值以方便測(cè)試。

您可以通過運(yùn)行腳本一次並將js-currentVersion HTML元素的值更改為腳本可以看到差異來測(cè)試示例。您還可以使用相同的版本重新運(yùn)行,以確認(rèn)您不會(huì)收到不必要的通知。

更進(jìn)一步

這就是我們擁有動(dòng)態(tài)瀏覽器通知所需的一切!如果您正在尋找更靈活的瀏覽器通知,建議您了解Service Worker API。 Service Worker可用於響應(yīng)推送通知,允許用戶收到通知,無論他們當(dāng)前是否正在訪問您的網(wǎng)站,從而實(shí)現(xiàn)更及時(shí)的更新。

瀏覽器通知API常見問題解答

什麼是瀏覽器通知API以及它是如何工作的?

瀏覽器通知API允許Web應(yīng)用程序向用戶顯示系統(tǒng)通知。這些通知類似於移動(dòng)設(shè)備上的推送通知,即使網(wǎng)頁未處於焦點(diǎn)狀態(tài)也可以顯示。 API的工作原理是請(qǐng)求用戶的權(quán)限以顯示通知。一旦獲得權(quán)限,Web應(yīng)用程序就可以使用Notification對(duì)象創(chuàng)建和顯示通知。

如何請(qǐng)求顯示通知的權(quán)限?

要請(qǐng)求權(quán)限,可以使用Notification.requestPermission()方法。此方法將向用戶顯示一個(gè)對(duì)話框,詢問他們是否允許顯示通知。該方法返回一個(gè)Promise,該P(yáng)romise解析為權(quán)限狀態(tài),可以是“granted”、“denied”或“default”。

如何創(chuàng)建和顯示通知?

一旦獲得權(quán)限,就可以使用Notification構(gòu)造函數(shù)創(chuàng)建和顯示通知。此構(gòu)造函數(shù)接受兩個(gè)參數(shù):通知的標(biāo)題和一個(gè)選項(xiàng)對(duì)象。選項(xiàng)對(duì)象可以包含body(通知的文本)、icon(要顯示的圖標(biāo))和tag(通知的標(biāo)識(shí)符)等屬性。

即使網(wǎng)頁未處於焦點(diǎn)狀態(tài),我也可以顯示通知嗎?

是的,瀏覽器通知API允許您即使網(wǎng)頁未處於焦點(diǎn)狀態(tài)也可以顯示通知。這對(duì)於需要通知用戶重要事件的Web應(yīng)用程序非常有用,即使他們沒有積極使用該應(yīng)用程序也是如此。

如何處理通知上的點(diǎn)擊事件?

您可以通過向通知對(duì)象添加事件偵聽器來處理通知上的點(diǎn)擊事件。當(dāng)用戶點(diǎn)擊通知時(shí),將調(diào)用事件偵聽器函數(shù)。

我可以以編程方式關(guān)閉通知嗎?

是的,您可以通過調(diào)用通知對(duì)像上的close()方法以編程方式關(guān)閉通知。如果您想在一段時(shí)間後自動(dòng)關(guān)閉通知,這將非常有用。

所有瀏覽器都支持瀏覽器通知嗎?

大多數(shù)現(xiàn)代瀏覽器都支持瀏覽器通知,包括Chrome、Firefox、Safari和Edge。但是,這些瀏覽器的不同版本之間的支持可能會(huì)有所不同,一些較舊的瀏覽器可能根本不支持通知。

我可以自定義通知的外觀嗎?

通知的外觀很大程度上取決於操作系統(tǒng)和瀏覽器。但是,您可以使用傳遞給Notification構(gòu)造函數(shù)的選項(xiàng)對(duì)象來自定義通知的某些方面,例如標(biāo)題、正文文本和圖標(biāo)。

如何檢查用戶是否已授予顯示通知的權(quán)限?

您可以通過訪問Notification.permission屬性來檢查當(dāng)前的權(quán)限狀態(tài)。如果用戶已授予權(quán)限,此屬性將為“granted”;如果他們已拒絕權(quán)限,則為“denied”;如果他們尚未響應(yīng)權(quán)限請(qǐng)求,則為“default”。

我可以在工作程序腳本中使用瀏覽器通知API嗎?

是的,可以在工作程序腳本中使用瀏覽器通知API。這允許您從後臺(tái)任務(wù)顯示通知,即使主網(wǎng)頁未處於焦點(diǎn)狀態(tài)也是如此。

以上是使用網(wǎng)絡(luò)通知API顯示動(dòng)態(tài)消息的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何在node.js中提出HTTP請(qǐng)求? 如何在node.js中提出HTTP請(qǐng)求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請(qǐng)求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。 1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場(chǎng)景,但需手動(dòng)處理數(shù)據(jù)拼接和錯(cuò)誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請(qǐng)求;2.axios是基於Promise的第三方庫,語法簡潔且功能強(qiáng)大,支持async/await、自動(dòng)JSON轉(zhuǎn)換、攔截器等,推薦用於簡化異步請(qǐng)求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基於Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時(shí)復(fù)制副本,因此互不影響;引用類型如對(duì)象、數(shù)組和函數(shù)存儲(chǔ)的是內(nèi)存地址,指向同一對(duì)象的變量會(huì)相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

React與Angular vs Vue:哪個(gè)JS框架最好? React與Angular vs Vue:哪個(gè)JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個(gè)JavaScript框架最好?答案是根據(jù)需求選擇最適合的。 1.React靈活自由,適合需要高度定制、團(tuán)隊(duì)有架構(gòu)能力的中大型項(xiàng)目;2.Angular提供完整解決方案,適合企業(yè)級(jí)應(yīng)用和長期維護(hù)的大項(xiàng)目;3.Vue上手簡單,適合中小型項(xiàng)目或快速開發(fā)。此外,是否已有技術(shù)棧、團(tuán)隊(duì)規(guī)模、項(xiàng)目生命週期及是否需要SSR也都是選擇框架的重要因素。總之,沒有絕對(duì)最好的框架,適合自己需求的就是最佳選擇。

JavaScript時(shí)間對(duì)象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時(shí)間對(duì)象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本週的JavaScript新聞!本週我們將重點(diǎn)關(guān)注:Oracle與Deno的商標(biāo)糾紛、新的JavaScript時(shí)間對(duì)象獲得瀏覽器支持、GoogleChrome的更新以及一些強(qiáng)大的開發(fā)者工具。讓我們開始吧! Oracle與Deno的商標(biāo)之爭Oracle試圖註冊(cè)“JavaScript”商標(biāo)的舉動(dòng)引發(fā)爭議。 Node.js和Deno的創(chuàng)建者RyanDahl已提交請(qǐng)願(yuàn)書,要求取消該商標(biāo),他認(rèn)為JavaScript是一個(gè)開放標(biāo)準(zhǔn),不應(yīng)由Oracle

處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機(jī)制,理解鍊式調(diào)用、錯(cuò)誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。 1.鍊式調(diào)用通過.then()返回新Promise實(shí)現(xiàn)異步流程串聯(lián),每個(gè).then()接收上一步結(jié)果並可返回值或Promise;2.錯(cuò)誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,並可在catch中返回默認(rèn)值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個(gè)完成即返回)和Promise.allSettled()(等待所有完成)

什麼是緩存API?如何與服務(wù)人員使用? 什麼是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請(qǐng)求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗(yàn)。 1.它允許開發(fā)者手動(dòng)存儲(chǔ)如腳本、樣式表、圖片等資源;2.可根據(jù)請(qǐng)求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個(gè)緩存;4.通過ServiceWorker監(jiān)聽fetch事件實(shí)現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用於離線支持、加快重複訪問速度、預(yù)加載關(guān)鍵資源及後臺(tái)更新內(nèi)容;6.使用時(shí)需注意緩存版本控制、存儲(chǔ)限制及與HTTP緩存機(jī)制的區(qū)別。

利用Array.Prototype方法用於JavaScript中的數(shù)據(jù)操作 利用Array.Prototype方法用於JavaScript中的數(shù)據(jù)操作 Jul 06, 2025 am 02:36 AM

JavaScript數(shù)組內(nèi)置方法如.map()、.filter()和.reduce()可簡化數(shù)據(jù)處理;1).map()用於一對(duì)一轉(zhuǎn)換元素生成新數(shù)組;2).filter()按條件篩選元素;3).reduce()用於聚合數(shù)據(jù)為單一值;使用時(shí)應(yīng)避免誤用導(dǎo)致副作用或性能問題。

JS綜述:深入研究JavaScript事件循環(huán) JS綜述:深入研究JavaScript事件循環(huán) Jul 08, 2025 am 02:24 AM

JavaScript的事件循環(huán)通過協(xié)調(diào)調(diào)用棧、WebAPI和任務(wù)隊(duì)列來管理異步操作。 1.調(diào)用棧執(zhí)行同步代碼,遇到異步任務(wù)時(shí)交由WebAPI處理;2.WebAPI在後臺(tái)完成任務(wù)後將回調(diào)放入相應(yīng)的隊(duì)列(宏任務(wù)或微任務(wù));3.事件循環(huán)檢查調(diào)用棧是否為空,若為空則從隊(duì)列中取出回調(diào)推入調(diào)用棧執(zhí)行;4.微任務(wù)(如Promise.then)優(yōu)先於宏任務(wù)(如setTimeout)執(zhí)行;5.理解事件循環(huán)有助於避免阻塞主線程並優(yōu)化代碼執(zhí)行順序。

See all articles