搜尋
首頁web前端js教程使用網絡通知API顯示動態消息

Web Notifications API:讓網站通知跳出瀏覽器限制

我們已經習慣了來自喜愛的網站或應用程序的手機通知,但現在瀏覽器直接推送通知也變得越來越普遍。例如,Facebook會在你有新的好友請求或有人評論你參與的帖子時發送通知;Slack會在你被提及的對話中發送通知。

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

本文將演示如何在Concise CSS網站上實現一個通知系統,以便在每次發布框架新版本時提醒訪客。我將展示如何結合使用localStorage和瀏覽器Notification API來實現這一目標。

Displaying Dynamic Messages Using the Web Notification API

Notification API基礎

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

(function() {
  if ("Notification" in window) {
    // 代码在此处
  }
})();

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

我們將permission屬性的輸出存儲在一個變量中。如果權限已授予或拒絕,則不返回任何內容。如果我們之前沒有請求過權限,則使用requestPermission方法請求權限。

(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

您應該會在瀏覽器中看到類似上圖的提示。

現在我們已經請求了權限,讓我們修改代碼,以便在允許權限的情況下顯示通知:

(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

雖然簡單,但功能有效。

我們在這裡使用requestPermission()方法的基於Promise的語法,在權限授予後顯示通知。我們使用Notification構造函數顯示通知。此構造函數接受兩個參數,一個用於通知標題,另一個用於選項。請參閱文檔鏈接以查找可以傳遞的完整選項列表。

存儲框架版本

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

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

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

此隱藏元素將用於在我們的conciseVersion鍵中存儲框架版本。我們還將使用此元素在發布框架的新版本時更新該鍵。

(function() {
  if ("Notification" in window) {
    // 代码在此处
  }
})();

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

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

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

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

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

現在我們可以獲取此元素並在JavaScript中與之交互。我們需要編寫一個函數來返回我們剛剛創建的隱藏元素內的文本。

(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!");
      });
  }
})();

此函數使用textContent屬性存儲.js-currentVersion元素的內容。讓我們再添加一個變量來存儲conciseVersion localStorage鍵的內容。

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

現在,我們在一個變量中擁有框架的最新版本,並且我們將localStorage鍵存儲到一個變量中。是時候添加確定是否有新版本的框架可用的邏輯了。

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

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

知道了這一點,我們將向訪客顯示通知並適當地更新我們的conciseVersion鍵。

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

要使用此函數,我們需要修改下面的權限代碼。

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

這允許我們在用戶之前已授予權限或剛剛授予權限時顯示通知。

顯示通知

到目前為止,我們只向用戶顯示了不包含太多信息的簡單通知。讓我們編寫一個函數,允許我們動態創建瀏覽器通知,並控制通知的許多不同方面。

此函數具有正文文本、圖標、標題以及可選鏈接和通知持續時間的參數。在內部,我們創建一個選項對象來存儲我們的通知正文文本和圖標。我們還創建Notification對象的新的實例,傳入我們的通知標題以及選項對象。

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

(function() {
  if ("Notification" in window) {
    // 代码在此处
  }
})();

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

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

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

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

我們使用displayNotification函數為我們的通知提供描述、圖像、標題和鏈接。

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

完整代碼和測試

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

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

運行此代碼應該會在您的瀏覽器中生成以下通知。

Displaying Dynamic Messages Using the Web Notification API

為了進行測試,您需要熟悉瀏覽器的通知權限。以下是管理Google Chrome、Safari、FireFox和Microsoft Edge中通知的一些快速參考。此外,您應該熟悉使用開發者控制台來刪除和修改localStorage值以方便測試。

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

更進一步

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

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

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

瀏覽器通知API允許Web應用程序向用戶顯示系統通知。這些通知類似於移動設備上的推送通知,即使網頁未處於焦點狀態也可以顯示。 API的工作原理是請求用戶的權限以顯示通知。一旦獲得權限,Web應用程序就可以使用Notification對象創建和顯示通知。

如何請求顯示通知的權限?

要請求權限,可以使用Notification.requestPermission()方法。此方法將向用戶顯示一個對話框,詢問他們是否允許顯示通知。該方法返回一個Promise,該Promise解析為權限狀態,可以是“granted”、“denied”或“default”。

如何創建和顯示通知?

一旦獲得權限,就可以使用Notification構造函數創建和顯示通知。此構造函數接受兩個參數:通知的標題和一個選項對象。選項對象可以包含body(通知的文本)、icon(要顯示的圖標)和tag(通知的標識符)等屬性。

即使網頁未處於焦點狀態,我也可以顯示通知嗎?

是的,瀏覽器通知API允許您即使網頁未處於焦點狀態也可以顯示通知。這對於需要通知用戶重要事件的Web應用程序非常有用,即使他們沒有積極使用該應用程序也是如此。

如何處理通知上的點擊事件?

您可以通過向通知對象添加事件偵聽器來處理通知上的點擊事件。當用戶點擊通知時,將調用事件偵聽器函數。

我可以以編程方式關閉通知嗎?

是的,您可以通過調用通知對像上的close()方法以編程方式關閉通知。如果您想在一段時間後自動關閉通知,這將非常有用。

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

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

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

通知的外觀很大程度上取決於操作系統和瀏覽器。但是,您可以使用傳遞給Notification構造函數的選項對象來自定義通知的某些方面,例如標題、正文文本和圖標。

如何檢查用戶是否已授予顯示通知的權限?

您可以通過訪問Notification.permission屬性來檢查當前的權限狀態。如果用戶已授予權限,此屬性將為“granted”;如果他們已拒絕權限,則為“denied”;如果他們尚未響應權限請求,則為“default”。

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

是的,可以在工作程序腳本中使用瀏覽器通知API。這允許您從後台任務顯示通知,即使主網頁未處於焦點狀態也是如此。

以上是使用網絡通知API顯示動態消息的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
在JavaScript中替換字符串字符在JavaScript中替換字符串字符Mar 11, 2025 am 12:07 AM

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

構建您自己的Ajax Web應用程序構建您自己的Ajax Web應用程序Mar 09, 2025 am 12:11 AM

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

10個JQuery Fun and Games插件10個JQuery Fun and Games插件Mar 08, 2025 am 12:42 AM

10款趣味橫生的jQuery遊戲插件,讓您的網站更具吸引力,提升用戶粘性!雖然Flash仍然是開發休閒網頁遊戲的最佳軟件,但jQuery也能創造出令人驚喜的效果,雖然無法與純動作Flash遊戲媲美,但在某些情況下,您也能在瀏覽器中獲得意想不到的樂趣。 jQuery井字棋遊戲 遊戲編程的“Hello world”,現在有了jQuery版本。 源碼 jQuery瘋狂填詞遊戲 這是一個填空遊戲,由於不知道單詞的上下文,可能會產生一些古怪的結果。 源碼 jQuery掃雷遊戲

如何創建和發布自己的JavaScript庫?如何創建和發布自己的JavaScript庫?Mar 18, 2025 pm 03:12 PM

文章討論了創建,發布和維護JavaScript庫,專注於計劃,開發,測試,文檔和促銷策略。

jQuery視差教程 - 動畫標題背景jQuery視差教程 - 動畫標題背景Mar 08, 2025 am 12:39 AM

本教程演示瞭如何使用jQuery創建迷人的視差背景效果。 我們將構建一個帶有分層圖像的標題橫幅,從而創造出令人驚嘆的視覺深度。 更新的插件可與JQuery 1.6.4及更高版本一起使用。 下載

如何在瀏覽器中優化JavaScript代碼以進行性能?如何在瀏覽器中優化JavaScript代碼以進行性能?Mar 18, 2025 pm 03:14 PM

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。

Matter.js入門:簡介Matter.js入門:簡介Mar 08, 2025 am 12:53 AM

Matter.js是一個用JavaScript編寫的2D剛體物理引擎。此庫可以幫助您輕鬆地在瀏覽器中模擬2D物理。它提供了許多功能,例如創建剛體並為其分配質量、面積或密度等物理屬性的能力。您還可以模擬不同類型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流瀏覽器。此外,它也適用於移動設備,因為它可以檢測觸摸並具有響應能力。所有這些功能都使其值得您投入時間學習如何使用該引擎,因為這樣您就可以輕鬆創建基於物理的2D遊戲或模擬。在本教程中,我將介紹此庫的基礎知識,包括其安裝和用法,並提供一

使用jQuery和Ajax自動刷新DIV內容使用jQuery和Ajax自動刷新DIV內容Mar 08, 2025 am 12:58 AM

本文演示瞭如何使用jQuery和ajax自動每5秒自動刷新DIV的內容。 該示例從RSS提要中獲取並顯示了最新的博客文章以及最後的刷新時間戳。 加載圖像是選擇

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具