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

目錄
什么是瀏覽器通知API以及它是如何工作的?
如何請(qǐng)求顯示通知的權(quán)限?
如何創(chuàng)建和顯示通知?
即使網(wǎng)頁(yè)未處于焦點(diǎn)狀態(tài),我也可以顯示通知嗎?
如何處理通知上的點(diǎn)擊事件?
我可以以編程方式關(guān)閉通知嗎?
所有瀏覽器都支持瀏覽器通知嗎?
我可以自定義通知的外觀嗎?
如何檢查用戶是否已授予顯示通知的權(quán)限?
我可以在工作程序腳本中使用瀏覽器通知API嗎?
首頁(yè) 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í)慣了來(lái)自喜愛(ài)的網(wǎng)站或應(yīng)用程序的手機(jī)通知,但現(xiàn)在瀏覽器直接推送通知也變得越來(lái)越普遍。例如,F(xiàn)acebook會(huì)在你有新的好友請(qǐng)求或有人評(píng)論你參與的帖子時(shí)發(fā)送通知;Slack會(huì)在你被提及的對(duì)話中發(fā)送通知。

作為前端開(kāi)發(fā)者,我很好奇如何利用瀏覽器通知來(lái)為那些不處理大量信息流的網(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來(lái)實(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)容。如果我們之前沒(méi)有請(qǐng)求過(guò)權(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

雖然簡(jiǎn)單,但功能有效。

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

存儲(chǔ)框架版本

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

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

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

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

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

我們可以使用少量CSS來(lái)隱藏此元素:

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

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

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

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

現(xiàn)在我們可以獲取此元素并在JavaScript中與之交互。我們需要編寫一個(gè)函數(shù)來(lái)返回我們剛剛創(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è)變量來(lái)存儲(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)檫@可能是他們第一次訪問(wèn)。如果鍵存在,我們檢查其值(存儲(chǔ)在currentVersion變量中)是否大于當(dāng)前版本的值(存儲(chǔ)在latestVersion變量中)。如果框架的最新版本大于訪客上次看到的版本,我們就知道已發(fā)布新版本。

注意:我們使用semver-compare庫(kù)來(lái)處理比較兩個(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í)顯示通知。

顯示通知

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

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

接下來(lái),如果我們想鏈接到我們的通知,我們將添加一個(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)該熟悉使用開(kāi)發(fā)者控制臺(tái)來(lái)刪除和修改localStorage值以方便測(cè)試。

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

更進(jìn)一步

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

瀏覽器通知API常見(jiàn)問(wèn)題解答

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

瀏覽器通知API允許Web應(yīng)用程序向用戶顯示系統(tǒng)通知。這些通知類似于移動(dòng)設(shè)備上的推送通知,即使網(wǎng)頁(yè)未處于焦點(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ì)話框,詢問(wèn)他們是否允許顯示通知。該方法返回一個(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)頁(yè)未處于焦點(diǎn)狀態(tài),我也可以顯示通知嗎?

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

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

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

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

是的,您可以通過(guò)調(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ì)象來(lái)自定義通知的某些方面,例如標(biāo)題、正文文本和圖標(biāo)。

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

您可以通過(guò)訪問(wèn)Notification.permission屬性來(lái)檢查當(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)頁(yè)未處于焦點(diǎn)狀態(tài)也是如此。

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

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系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脫衣機(jī)

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集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機(jī)制通過(guò)標(biāo)記-清除算法自動(dòng)管理內(nèi)存,以減少內(nèi)存泄漏風(fēng)險(xiǎn)。引擎從根對(duì)象出發(fā)遍歷并標(biāo)記活躍對(duì)象,未被標(biāo)記的則被視為垃圾并被清除。例如,當(dāng)對(duì)象不再被引用(如將變量設(shè)為null),它將在下一輪回收中被釋放。常見(jiàn)的內(nèi)存泄漏原因包括:①未清除的定時(shí)器或事件監(jiān)聽(tīng)器;②閉包中對(duì)外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。V8引擎通過(guò)分代回收、增量標(biāo)記、并行/并發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時(shí)間。開(kāi)發(fā)時(shí)應(yīng)避免不必要的全局引用、及時(shí)解除對(duì)象關(guān)聯(lián),以提升性能與穩(wěn)定性。

如何在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模塊無(wú)需依賴,適合基礎(chǔ)場(chǎng)景,但需手動(dòng)處理數(shù)據(jù)拼接和錯(cuò)誤監(jiān)聽(tīng),例如用https.get()獲取數(shù)據(jù)或通過(guò).write()發(fā)送POST請(qǐng)求;2.axios是基于Promise的第三方庫(kù),語(yǔ)法簡(jiǎn)潔且功能強(qiáng)大,支持async/await、自動(dòng)JSON轉(zhuǎn)換、攔截器等,推薦用于簡(jiǎn)化異步請(qǐng)求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基于Promise且語(yǔ)法簡(jiǎn)單

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)題。理解這兩類差異有助于編寫更穩(wěn)定可靠的代碼。

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

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)用和長(zhǎng)期維護(hù)的大項(xiàng)目;3.Vue上手簡(jiǎn)單,適合中小型項(xiàng)目或快速開(kāi)發(fā)。此外,是否已有技術(shù)棧、團(tuán)隊(duì)規(guī)模、項(xiàng)目生命周期及是否需要SSR也都是選擇框架的重要因素??傊?,沒(méi)有絕對(duì)最好的框架,適合自己需求的就是最佳選擇。

立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) 立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) Jul 04, 2025 am 02:42 AM

IIFE(ImmediatelyInvokedFunctionExpression)是一種在定義后立即執(zhí)行的函數(shù)表達(dá)式,用于變量隔離和避免污染全局作用域。它通過(guò)將函數(shù)包裹在括號(hào)中使其成為表達(dá)式,并緊隨其后的一對(duì)括號(hào)來(lái)調(diào)用,如(function(){/code/})();。其核心用途包括:1.避免變量沖突,防止多個(gè)腳本間的命名重復(fù);2.創(chuàng)建私有作用域,使函數(shù)內(nèi)部變量不可見(jiàn);3.模塊化代碼,便于初始化工作而不暴露過(guò)多變量。常見(jiàn)寫法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達(dá)式、結(jié)

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

Promise是JavaScript中處理異步操作的核心機(jī)制,理解鏈?zhǔn)秸{(diào)用、錯(cuò)誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。1.鏈?zhǔn)秸{(diào)用通過(guò).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.它允許開(kāi)發(fā)者手動(dòng)存儲(chǔ)如腳本、樣式表、圖片等資源;2.可根據(jù)請(qǐng)求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個(gè)緩存;4.通過(guò)ServiceWorker監(jiān)聽(tīng)fetch事件實(shí)現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用于離線支持、加快重復(fù)訪問(wèn)速度、預(yù)加載關(guān)鍵資源及后臺(tái)更新內(nèi)容;6.使用時(shí)需注意緩存版本控制、存儲(chǔ)限制及與HTTP緩存機(jī)制的區(qū)別。

See all articles