使用網絡通知API顯示動態消息
Web Notifications API:讓網站通知跳出瀏覽器限制
我們已經習慣了來自喜愛的網站或應用程序的手機通知,但現在瀏覽器直接推送通知也變得越來越普遍。例如,Facebook會在你有新的好友請求或有人評論你參與的帖子時發送通知;Slack會在你被提及的對話中發送通知。
作為前端開發者,我很好奇如何利用瀏覽器通知來為那些不處理大量信息流的網站提供服務。如何根據訪客對網站的興趣添加相關的瀏覽器通知?
本文將演示如何在Concise CSS網站上實現一個通知系統,以便在每次發布框架新版本時提醒訪客。我將展示如何結合使用localStorage和瀏覽器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(); } })();
您應該會在瀏覽器中看到類似上圖的提示。
現在我們已經請求了權限,讓我們修改代碼,以便在允許權限的情況下顯示通知:
(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!"); }); } })();
雖然簡單,但功能有效。
我們在這裡使用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鏈接或完整代碼塊)
運行此代碼應該會在您的瀏覽器中生成以下通知。
為了進行測試,您需要熟悉瀏覽器的通知權限。以下是管理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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。
