javascript
javascript
javascript
  • Lấy vị trí người dùng với javascript
  • [Problem] Lấy key đầu tiên tìm thấy chứa giá trị cần tìm (ok)
  • 🥸Đoạn mã JavaScript để thêm ký tự đặc biệt vào đầu mỗi dòng trong văn bản nhiều dòng (ok)
  • 😍Tạo ra font in đậm và copy đến website để sử dụng (ok)
  • Hiệu ứng mở sách cực đẹp
  • 🤩JS: Scroll Animation using Intersection Observer API 🤩 (ok)
  • 😅Draw svg on scroll Full (ok)
  • 😄Install Linguise on any domain dịch tự động (ok)
  • 😅Sử dụng ajax tạo popup cho các bài viết wordrpess mattervn.com (ok)
  • 😆PWA - beforeinstallprompt toplusgames.com (ok)
  • How to Use the HTML5 Full-Screen API (Again) (ok)
  • [ERROR GAME] fix lỗi không load iframe gamedistribution.com for toplusgames.com (ok)
  • 😅jQuery Plugin To Create Animated Placeholders - placeholderTypewriter (ok)
  • 😍Làm chức năng thông báo khách hàng đăng ký namkhoahanoi.vn (ok)
  • Tencent Captcha Demo (ok)
  • 😉Send Mail same javascript elasticemail (ok)
  • 🥳Các tool phong thuỷ (ok)
  • 😇Nice Select A lightweight Vanilla JavaScript plugin (ok)
  • Merge objects with the same id but sum values of the objects (ok)
  • 😅Page: DOMContentLoaded, load, beforeunload, unload phần 1 (ok)
  • 😍Scripts: async, defer phần 2(ok)
  • 😂Javascript Array chunkArrayInGroups(arr, size)
  • Sequentially Resolve Promises Works, Giải quyết tuần tự các lời hứa hoạt động (ok)
  • Using Async / Await with the Array Reduce Method API (ok)
  • Flatten an array of arrays,merge, làm phẳng một mảng các mảng (ok)
  • 😌Dependent Dropdown Full (ok)
  • 🥳Select Box Change Dependent Options dynamically (JavaScript Object)
  • 🤩Add elements dynamically full (ok)
  • 😅👌Multiple versions jquery (ok)
  • 😍Cách sử dụng jQuery trong sweetAlert2 là chúng ta phải sử dụng didOpen full (ok)
  • 😁😁 mdbgo.io, mdbootstrap.com full (ok)
  • 🤪Chú ý nếu lỗi cảnh báo từ khóa new nếu dùng trong js thường chúng ta sẽ sử dụng trong mudule (ok)
  • 😝reCAPTCHA javascript (ok)
  • Firework Simulator v2 Phao Hoa (ok)
  • Active scroll center (ok)
  • 🤪Sort array of objects by string property value (ok)
  • 😏findIndex, find index in Array object (ok)
  • 😂Sử dụng nhiều toán tử 3, multiple Ternary Operators (ok)
  • 😅A simple and easy to use library that creates fullscreen scrolling websites fullPage.js (ok)
  • Xây dựng ứng dụng CRUD sử dụng Vue.js trong Laravel (ok)
  • [Chart] Morris.js Line & Area Charts,Bar Charts, Donut Charts, graph (ok)
  • [Chart] Chart.js
  • Multi select checkbox table bootstrap (ok)
  • 😀jquery new, jquery old, jquery migrate (ok)
  • Popup slide up from the bottom overflowing other div blocks (ok)
  • ASYNC JavaScript (CALLBACK, PROMISES, ASYNC AWAIT) video (ok)
  • === START jQuery Mobile ===
  • Data Attributes full (ok)
  • Viết một ứng dụng Restaurant Picke sử dụng "back menu" (ok)
  • Viết một ứng dụng thời tiết, Weather sử dụng panel (ok)
  • jQuery Mobile Tutorial w3schools.com (ok)
  • jQuery Mobile
  • jQuery Mobile - Events (ok)
  • Back button in jquery mobile (ok)
  • === END jQuery Mobile ===
  • removeDuplicates, Remove duplicate values from JS array, remove all duplicates an array object (ok)
  • Sử dụng thư viện jquery.hoverdir.js để làm hiệu ứng hover tuyệt đẹp (ok)
  • Modernizr là gì ? Sử dụng nó cho những trình duyệt cũ ra sao? (ok)
  • Nhận biết tính năng CSS: Modernizr hay Feature Queries? (ok)
  • [SALESFORCE] Remote Action function in Visualforce Page (ok)
  • ScrollIt.js menu (ok)
  • Cách sử dụng scrollTo vanilla cực chất 😘 (ok)
  • Một bài toán xử lý bất đồng bộ trong kintone để lấy số requet quá giới hạn (OK)
  • hexagon thư viện tạo avatar Canvas (ok)
  • 😅Sử dụng Object.assign và để copy dữ liệu, edit, input, form (ok)
  • Một cách đặt và gán giá trị trong mảng, object cự ngắn gọn (ok)
  • [LAZY] jQuery.Lazy và tạo background-loading cực chất (ok)
  • Ví dụ Sử dụng sẵn thư viện masonry của wordpres (ok)
  • Ảnh base64 dùng làm src, placeholder (ok)
  • Kiểm tra hình ảnh đã được tải với thư viện imagesLoaded (ok)
  • Check if Function Exists before Calling? (ok)
  • Async/Await Javascript Full Example (ok)
  • Thenables in JavaScript phục vụ cho bài viết trên (ok)
  • Script distance, khoảng cách (ok)
  • Time, Date full (ok)
  • Function getAllDatesOfMonth (ok)
  • How do I make a placeholder for a 'select' box? (ok)
  • Library choise (ok)
  • jQuery - Redirect with post, Get data php (ok)
  • How to pass data from one page to another page html (ok)
  • how to send data onClick() to another php for processing using post or get?
  • draw grid, vẽ grid (ok)
  • Fullscreen Horizontal Page Slider with jQuery and CSS3 - HSlider scroll template html (ok)
  • _.template, UnderscoreJS Templates Full (ok)
  • Character limit on tag type input number (ok)
  • How to set maximum length in input type=number (ok)
  • ========= START JEST =======
  • Getting Started (ok)
  • Using Matchers (ok)
  • Testing Asynchronous Code
  • Setup and Teardown (ok)
  • Mock Functions
  • Jest Platform
  • Jest tutorial
  • Testing trong Javascript với Jest (Phần 1) (ok)
  • Testing trong Javascript với Jest (Phần 2)
  • Giới thiệu về Jest (Delightful JavaScript Testing)
  • Thử nghiệm phát triển theo hướng phản ứng với Jest và Enzyme
  • Cách kiểm tra các thành phần phản ứng với Jest và Enzyme, Phần 1
  • Cách kiểm tra thành phần phản ứng với Jest và Enzyme, Phần 2
  • Jest js mock jquey and lib
  • Unit testing Các thành phần React với Enzyme và Jest
  • Hướng dẫn viết unit test React với Jest và Enzyme (P1)
  • Tôi đã test các React component như thế nào? (phần 2)
  • Test component trong React với Jest
  • Test Component với Jest và Emzyme
  • Tổng quan về unit test cho dự án react redux saga với Jest Part 1
  • ========= END JEST =======
  • ======= START GULP TUTORIAL ======
  • [GULP] Tìm hiểu về Gulp.js
  • [GULP] Gulp Tutorial
  • [GULP] Gulp - Developing An Application (ok)
  • [GULP] Gulp - Combining Tasks (ok)
  • [GULP] Gulp - Watch (ok)
  • [GULP] Gulp - Live Reload
  • [GULP] Gulp - Optimizing CSS and JavaScript
  • [GULP] Gulp - Optimizing Images
  • [GULP] Gulp - Useful Plugins
  • [GULP] Gulp - Cleaning Unwanted Files
  • Đọc thêm những tài liệu trang khác
  • ======= END GULP TUTORIAL ======
  • Prevent form submission on Enter key press, keyCode (ok)
  • Lấy kích thước ảnh gốc image (ok)
  • 😆How to Center Carousel Slider (ok)
  • Putting Dots onto Owl Carousel Instead of below specialtouchgifts.com.au (ok)
  • Cách xây dựng một Full Screen Carousel với Owl.js
  • Lazy load với owl.carousel.js (ok)
  • Show half of the other item on Owl Carousel vinmec.com items: 1.5 (ok)
  • Show half of the other item on Owl Carousel vinmec.com stagePadding (ok)
  • ------------ Start Fetch -----------
  • Using Fetch Full
  • 😅Javascript Fetch JSON PHP Complete FormData phần 1(ok)
  • Một ví dụ quá đỉnh lấy dữ liệu của form submit trong js bằng đối tượng new FormData + php phần 2(ok)
  • Có một sự thật sử dụng async đồng nghĩa với trả về kết quả là PROMISE (ok)
  • 😅Promise.all full (ok)
  • All you need to know about Promise.all
  • [PROMISE] Promise.all()
  • [PROMISE] Tìm hiểu về promise trong ES6
  • [PROMISE] Introduction to Promises
  • jQuery off() Method (ok)
  • How to make HTTP requests with Axios
  • Axios vs Fetch - 2020 nên sử dụng thằng nào với những tính năng mới trong javascript
  • Get and Post method using Fetch API (ok)
  • Sử dụng JavaScript Fetch API với Async/Await (ok)
  • Xử lý lỗi cho fetch trong trường hợp không có kết nối hoặc kết nối lâu (ok)
  • ------------ End Fetch -----------
  • BigDataCloud Free Reverse Geocoding Javascript API Client (ok)
  • Vietmap API
  • 🥰Sử dụng API Giao hàng Nhanh để tính giá cước vận chuyển (ok)
  • photonsearch as you type with OpenStreetMap map (ok)
  • Leaflet - Một thư viện JS mã nguồn mở cho việc xây dụng ứng dụng bản đồ map (ok)
  • Xây dựng popup lấy vị trí map áp dụng pointfinder (ok)
  • Reverse Geocoding Convert Lat Long to Address map (ok)
  • Free Reverse Geocoding Javascript API map (ok)
  • [YAML] In Action Tutorial Series - General - Hướng dẫn sử dụng file YML YAML cơ bản
  • ----------------- Start Notification -----------------
  • Đối tượng caches object caches (ok)
  • Notification (ok)
  • Sử dụng indexedDB (ok)
  • Using the Notifications API (ok)
  • NotificationEvent (chưa có ví dụ :((
  • ServiceWorkerGlobalScope.onnotificationclick (ok)
  • ServiceWorkerRegistration.getNotifications(ok)
  • ServiceWorkerRegistration.showNotification(ok)
  • Giao tiếp giữa các cửa sổ với Window.postMessage API (ok)
  • Window open() Method (ok)
  • ----------------- End Notification -----------------
  • Example Cookie full (ok)
  • Thay đổi class active javascript bằng cách viết hàm (P1)
  • Thay đổi class active javascript bằng cách viết hàm (P2)
  • jQuery Mockjax Plugin (chưa học cách sử dụng)
  • jQuery Ajax X-editable bootstrap plugin (chưa học cách sử dụng)
  • Lọc theo điều kiện (filter) (ok)
  • Các ví dụ về filter
  • jQuery | grep() Method (ok)
  • Hai bài toán so sánh kinh điển trong javascript
  • Function random :)
  • Một cách sử dụng tab trong theme newspaper
  • Hiệu ứng scroll + animation + menu trượt mượt
  • Trigger a CSS animation on scroll xuongkhopbacninh.vn (ok)
  • App Css Loaded (scroll create link) (ok)
  • Hiệu tứng scroll cực chất (ok)
  • App Js Loaded (ok)
  • Sử dụng async và defer full (Oke)
  • Cách sử dụng Thuộc tính async và defer trong JavaScript hay
  • ReferenceError: Can't find variable: requestAnimationFrame
  • Đoạn code check lỗi PHP trong Ajax
  • [SELECT2] Sử dụng Select2 để thay thế select boxes
  • Một cách sử dụng lazyload khi addclass thật khó khăn...
  • Hiệu ứng croll chuột và % cực đẹp :_
  • Tạo chức năng tự động hoàn tất nhập liệu với thư viện jQuery UI Autocomplete (Phần 1)
  • Tạo chức năng tự động hoàn tất nhập liệu với thư viện jQuery UI Autocomplete (Phần 2)
  • JavaScript String split() Method (OK)
  • Sử dụng thư viện displace để làm menu kéo thả (ok):)))
  • Menu cực chất :)))
  • Sử dụng thư viện slick (ok)
  • vertical scroll, Vertical carousel (ok)
  • Google-like Thanos disintegration (ok)
  • Dùng thư viện jspdf
  • Công thức Toán học cho website
  • Fix lỗi tự động làm thay đổi độ cao :( vieclam123.vn :(
  • Sử dụng window.addEventListener để resize và responsive <3
  • Javascript create, read, and delete cookies (ok)
  • Tự động submit bằng javscript :))) (ok)
  • avoid form warning if user clicks refresh (ok)
  • Một cách truy cập phần tử bằng js thông qua id lạ :)))
  • Meta Refresh
  • Truyền dữ liệu từ javascript sang php
    • Sử dụng form để truyền sang php (ok)
    • Truyền giá trị theo file bằng đường dẫn (ok)
    • Dùng json để truyền sang php
  • auto-refresh page once only after first load – Using JavaScript / JQuery
    • auto-refresh page once only after first load – Using JavaScript / JQuery (ok)
  • Sticky Scroller
    • Sticky Scroller phần 1 (ok)
    • Sticky Scroller phần 2 (ok)
    • owl carousel with dotsContainer (Dots + Text) (ok)
    • Owl Carousel 2 Thumbnails plugin (ok)
  • easy_background Background Slideshow (ok) dev.vieclam123.vn
  • scroll cực chất timviec365.vn, vieclam123.vn (ok)
  • Thư viện lightslider-master gần giống với Owl Carousel
  • Thư viện lightGallery để làm những bộ Sưu tập Gallery
  • Tự viết click slide (ok)
  • Draggable & Touch-friendly Slider Carousel In Pure JS (ok)
  • Slider owl được viết dưới dạng Thumnail (0k)
  • jquery.js:5092 [Violation] Added non-passive event listener to a scroll-blocking 'touchstart' (ok)
  • Added non-passive event listener to a scroll-blocking 'touchstart' event (ok)
  • sticky-mobile-menu-burger-menu (ok)
  • How can I add class to the first and last item among the visible items of Owl Carousel 2? (ok)
  • Owl-carousel2 DEMO - items in 2 rows (oke)
  • How can I create a carousel slick with multiple rows? (ok)
  • Một cách sử dụng create <style> để thêm style (ok)
  • Two Rows Olw Carousel (ok) vieclam123.vn
  • Chức năng tự gọi Javascript (ok) tự động auto
  • Click Next Javascript Base (ok)
  • Slider owl được viết dưới dạng Thumnail viết trên jsfiddle (0k)
  • 😆Creating a Countdown Timer, dakhoathienhoa.com.vn (oK)
  • 🥸NumScroller, Counter From Zero To Value - Javascript Animation (ok)
  • Click Button background-hover white (ok)
  • CodePen HomeLazy Loading Images (Ok)
  • Custom Date Javasript (job247.vn)
  • Tooltip
  • button thay đổi thẻ tags button và span trong Owl Carousel thành thẻ khác :)) (ok)
  • Thêm class vào navigation Owl Carousel (ok)
  • Click lần đầu sử event.preventDefault(); lầu sau not event.preventDefault();
  • landscape && landscape (ok)
  • Landscape && Portrait (ok) job247.vn
  • Hammer thư viện JavaScript chạm cho màn hình cảm ứng
  • jQuery Plugin To Add CSS3 Scrolling Effects On Your Web Page - Smoove menu (ok)
  • 😃Auto Expanding Table Of Contents Plugin - Dynamic Content menu (ok)
  • Tornis - watch and respond
  • scroll-manager
  • Xem thêm
  • Hướng dẫn nấu món "Lazy loading image" theo chuẩn 5 sao Google
  • Welcome to jquery-confirm!
    • jQuery Message Box Plugin Demo Page
  • Magnific-Popup Popup img
  • Slider Swiper Slider-Swiper dùng viết slider giống app
  • Magnific Popup Documentation
  • filter search (ok)
  • Is it possible to convert a select menu to buttons? (ok)
  • Changing selected option on button click select (ok) homef.vn hoặc inop.vyanh.net
  • scrooll animation (job247.vn) (ok)
  • Select2 tutorial
    • Single select boxes (ok)
  • [SELECT2] Disabling a Select2 control (ok)
  • Disabling options (ok)
  • placeholder (ok)
  • Hiển thị nút xóa các giá trị đã chọn + allowClear (ok)
  • Đọc dữ liệu từ một mảng, Data sources (ok)
  • Sử dụng database + php (ok)
  • [SELECT2] Sử dụng form + select2 + ajax + get value (ok)
  • Đọc dữ liệu từ nguồn khác sử dụng AJAX (ok)
  • Thiết lập giá trị mặc định ban đầu trên HTML như bình thường (ok)
  • Sử dụng Ajax để tải dữ liệu từ một nguồn khác (ok)
  • change form
Powered by GitBook
On this page
  • to-do-notifications
  • Ví dụ
  • Yêu cầu sự cho phép
  • Tạo thông báo
  • Thông báo kết thúc
  • Sự kiện thông báo
  • Thay thế các thông báo hiện có

Was this helpful?

Using the Notifications API (ok)

https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API/Using_the_Notifications_API

PreviousSử dụng indexedDB (ok)NextNotificationEvent (chưa có ví dụ :((

Last updated 4 years ago

Was this helpful?

to-do-notifications

Các cho phép một trang web hoặc ứng dụng thông báo gửi được hiển thị bên ngoài trang ở cấp hệ thống; điều này cho phép các ứng dụng web gửi thông tin đến người dùng ngay cả khi ứng dụng không hoạt động hoặc ở chế độ nền. Bài viết này xem xét những điều cơ bản về sử dụng API này trong các ứng dụng của riêng bạn.

Thông thường, thông báo hệ thống đề cập đến cơ chế thông báo tiêu chuẩn của hệ điều hành: suy nghĩ ví dụ về cách hệ thống máy tính để bàn hoặc thiết bị di động thông thường phát thông báo.

Tất nhiên, hệ thống thông báo hệ thống sẽ khác nhau tùy theo nền tảng và trình duyệt, nhưng điều này vẫn ổn và API Thông báo được viết đủ chung để tương thích với hầu hết các hệ thống thông báo hệ thống.

Ví dụ

Yêu cầu sự cho phép

Trước khi một ứng dụng có thể gửi thông báo, người dùng phải cấp cho ứng dụng quyền làm như vậy. Đây là một yêu cầu phổ biến khi API cố gắng tương tác với một thứ gì đó bên ngoài trang web - ít nhất một lần, người dùng cần cấp quyền cụ thể cho ứng dụng đó để hiển thị thông báo, từ đó cho phép người dùng kiểm soát ứng dụng / trang web nào được phép hiển thị thông báo.

Do lạm dụng thông báo đẩy trong quá khứ, các trình duyệt và nhà phát triển web đã bắt đầu thực hiện các chiến lược để giúp giảm thiểu vấn đề này. Bạn chỉ nên yêu cầu đồng ý hiển thị thông báo để đáp lại cử chỉ của người dùng (ví dụ: nhấp vào nút). Đây không chỉ là cách thực hành tốt nhất - bạn không nên spam người dùng bằng các thông báo mà họ không đồng ý - nhưng các trình duyệt chuyển tiếp sẽ không cho phép rõ ràng các yêu cầu cấp phép thông báo không được kích hoạt để đáp ứng cử chỉ của người dùng. Firefox đã làm điều này từ phiên bản 72, ví dụ, và Safari đã thực hiện nó một thời gian.

Kiểm tra trạng thái cho phép hiện tại

Xin phép

Notification.requestPermission().then(function(result) {
  console.log(result);
});

Điều này sử dụng phiên bản dựa trên lời hứa của phương pháp. Nếu bạn muốn hỗ trợ các phiên bản cũ hơn, bạn có thể phải sử dụng phiên bản gọi lại cũ hơn, trông giống như sau:

Notification.requestPermission();

Phiên bản gọi lại tùy chọn chấp nhận chức năng gọi lại được gọi một khi người dùng đã trả lời yêu cầu hiển thị quyền.

Thí dụ

Trong bản demo danh sách việc cần làm của chúng tôi, chúng tôi bao gồm nút "Bật thông báo", khi được nhấn, sẽ yêu cầu quyền thông báo cho ứng dụng.

<button id="enable">Enable notifications</button>

Bấm vào đây gọi askNotificationPermission()hàm:

function askNotificationPermission() {
  // function to actually ask the permissions
  function handlePermission(permission) {
    // Whatever the user answers, we make sure Chrome stores the information
    if(!('permission' in Notification)) {
      Notification.permission = permission;
    }

    // set the button to shown or hidden, depending on what the user answers
    if(Notification.permission === 'denied' || Notification.permission === 'default') {
      notificationBtn.style.display = 'block';
    } else {
      notificationBtn.style.display = 'none';
    }
  }

  // Let's check if the browser supports notifications
  if (!('Notification' in window)) {
    console.log("This browser does not support notifications.");
  } else {
    if(checkNotificationPromise()) {
      Notification.requestPermission()
      .then((permission) => {
        handlePermission(permission);
      })
    } else {
      Notification.requestPermission(function(permission) {
        handlePermission(permission);
      });
    }
  }
}

Nhìn vào khối chính thứ hai trước, bạn sẽ thấy rằng trước tiên chúng tôi sẽ kiểm tra xem Thông báo có được hỗ trợ hay không. Nếu có, chúng tôi sẽ chạy kiểm tra xem phiên bản dựa trên lời hứa có Notification.requestPermission()được hỗ trợ hay không. Nếu đúng như vậy, chúng tôi chạy phiên bản dựa trên lời hứa (được hỗ trợ ở mọi nơi trừ Safari) và nếu không, chúng tôi sẽ chạy phiên bản dựa trên cuộc gọi lại cũ hơn (được hỗ trợ trong Safari).

Để tránh trùng lặp mã, chúng tôi đã lưu trữ một vài bit mã vệ sinh bên trong handlePermission()hàm, đây là khối chính đầu tiên bên trong đoạn mã này. Bên trong đây, chúng tôi đặt Notification.permissiongiá trị một cách rõ ràng (một số phiên bản cũ của Chrome không thể tự động làm điều này) và hiển thị hoặc ẩn nút tùy thuộc vào những gì người dùng đã chọn trong hộp thoại cấp phép. Chúng tôi không muốn hiển thị nếu quyền đã được cấp, nhưng nếu người dùng chọn từ chối cấp phép, chúng tôi muốn cho họ cơ hội thay đổi ý định sau này.

Tính năng phát hiện lời hứa requestPermission ()

Ở trên chúng tôi đã nói rằng chúng tôi phải kiểm tra xem trình duyệt có hỗ trợ phiên bản hứa hẹn hay không Notification.requestPermission(). Chúng tôi đã làm điều này bằng cách sử dụng như sau:

function checkNotificationPromise() {
    try {
      Notification.requestPermission().then();
    } catch(e) {
      return false;
    }

    return true;
  }

Về cơ bản chúng tôi cố gắng xem liệu .then()phương pháp có sẵn trên requestPermission(). Nếu vậy, chúng tôi di chuyển và trở về true. Nếu thất bại, chúng tôi trở lại falsetrong catch() {}khối.

Tạo thông báo

Ví dụ: trong ví dụ về danh sách việc cần làm, chúng tôi sử dụng đoạn mã sau để tạo thông báo khi được yêu cầu (được tìm thấy bên trong createNotification()hàm):

var img = '/to-do-notifications/img/icon-128.png';
var text = 'HEY! Your task "' + title + '" is now overdue.';
var notification = new Notification('To do list', { body: text, icon: img });

Thông báo kết thúc

var n = new Notification('My Great Song');
document.addEventListener('visibilitychange', function() {
  if (document.visibilityState === 'visible') {
    // The tab has become visible so clear the now-stale Notification.
    n.close();
  }
});

Lưu ý: API này không nên được sử dụng chỉ để xóa thông báo khỏi màn hình sau một độ trễ cố định (trên các trình duyệt hiện đại) vì phương pháp này cũng sẽ xóa thông báo khỏi bất kỳ khay thông báo nào, ngăn người dùng tương tác với nó sau khi ban đầu cho xem.

Lưu ý : Khi bạn nhận được một sự kiện "đóng", không có gì đảm bảo rằng đó là người dùng đã đóng thông báo. Điều này phù hợp với đặc điểm kỹ thuật, trong đó nêu rõ: "Khi đóng thông báo, bởi nền tảng thông báo cơ bản hoặc bởi người dùng, các bước đóng cho thông báo phải được chạy."

Sự kiện thông báo

Thay thế các thông báo hiện có

Người dùng thường không mong muốn nhận được nhiều thông báo trong một khoảng thời gian ngắn - ví dụ: nếu ứng dụng nhắn tin thông báo cho người dùng cho mỗi tin nhắn đến và chúng được gửi nhiều thì sao? Để tránh spam người dùng có quá nhiều thông báo, có thể sửa đổi hàng đợi thông báo đang chờ xử lý, thay thế một hoặc nhiều thông báo đang chờ xử lý bằng một thông báo mới.

Để làm điều này, có thể thêm một thẻ vào bất kỳ thông báo mới nào. Nếu một thông báo đã có cùng một thẻ và chưa được hiển thị, thông báo mới sẽ thay thế thông báo trước đó. Nếu thông báo có cùng thẻ đã được hiển thị, thông báo trước đó sẽ bị đóng và thông báo mới được hiển thị.

Ví dụ về thẻ

Giả sử HTML cơ bản sau:

<button>Notify me!</button>

Có thể xử lý nhiều thông báo theo cách này:

window.addEventListener('load', function () {
  // At first, let's check if we have permission for notification
  // If not, let's ask for it
  if (window.Notification && Notification.permission !== "granted") {
    Notification.requestPermission(function (status) {
      if (Notification.permission !== status) {
        Notification.permission = status;
      }
    });
  }

  var button = document.getElementsByTagName('button')[0];

  button.addEventListener('click', function () {
    // If the user agreed to get notified
    // Let's try to send ten notifications
    if (window.Notification && Notification.permission === "granted") {
      var i = 0;
      // Using an interval cause some browsers (including Firefox) are blocking notifications if there are too much in a certain time.
      var interval = window.setInterval(function () {
        // Thanks to the tag, we should only see the "Hi! 9" notification 
        var n = new Notification("Hi! " + i, {tag: 'soManyNotification'});
        if (i++ == 9) {
          window.clearInterval(interval);
        }
      }, 200);
    }

    // If the user hasn't told if he wants to be notified or not
    // Note: because of Chrome, we are not sure the permission property
    // is set, therefore it's unsafe to check for the "default" value.
    else if (window.Notification && Notification.permission !== "denied") {
      Notification.requestPermission(function (status) {
        // If the user said okay
        if (status === "granted") {
          var i = 0;
          // Using an interval cause some browsers (including Firefox) are blocking notifications if there are too much in a certain time.
          var interval = window.setInterval(function () {
            // Thanks to the tag, we should only see the "Hi! 9" notification 
            var n = new Notification("Hi! " + i, {tag: 'soManyNotification'});
            if (i++ == 9) {
              window.clearInterval(interval);
            }
          }, 200);
        }

        // Otherwise, we can fallback to a regular modal alert
        else {
          alert("Hi!");
        }
      });
    }

    // If the user refuses to get notified
    else {
      // We can fallback to a regular modal alert
      alert("Hi!");
    }
  });
});

Một trong những trường hợp sử dụng rõ ràng nhất cho thông báo web là thư hoặc ứng dụng IRC dựa trên web cần thông báo cho người dùng khi nhận được tin nhắn mới, ngay cả khi người dùng đang làm gì đó với ứng dụng khác. Nhiều ví dụ về điều này hiện tồn tại, chẳng hạn như .

Chúng tôi đã viết một ví dụ trong thế giới thực - một ứng dụng danh sách việc cần làm - để cung cấp thêm ý tưởng về cách sử dụng thông báo web. Nó lưu trữ dữ liệu cục bộ bằng và thông báo cho người dùng khi đến hạn sử dụng thông báo hệ thống. hoặc .

Ngoài ra, trong Chrome và Firefox, bạn hoàn toàn không thể yêu cầu thông báo trừ khi trang web là bối cảnh an toàn (ví dụ: HTTPS) và bạn không còn có thể cho phép quyền thông báo được yêu cầu từ các nguồn gốc chéo .

Bạn có thể kiểm tra xem bạn đã có quyền hay chưa bằng cách kiểm tra giá trị của thuộc tính chỉ đọc. Nó có thể có một trong ba giá trị có thể:defaultNgười dùng chưa được yêu cầu cho phép, vì vậy thông báo sẽ không được hiển thị.grantedNgười dùng đã cấp quyền hiển thị thông báo, sau khi được hỏi trước đó.deniedNgười dùng đã từ chối cấp phép rõ ràng để hiển thị thông báo.

Nếu quyền hiển thị thông báo chưa được cấp, ứng dụng cần sử dụng phương thức để yêu cầu điều này từ người dùng. Ở dạng đơn giản nhất, chúng tôi chỉ bao gồm các mục sau:

Lưu ý: Trước khi phiên bản 37, Chrome không cho phép bạn gọi trong loadxử lý sự kiện (xem ).

Tạo một thông báo là dễ dàng; chỉ cần sử dụng hàm tạo. Nhà xây dựng này hy vọng một tiêu đề sẽ hiển thị trong thông báo và một số tùy chọn để tăng cường thông báo như một hoặc một văn bản .

Được sử dụng để xóa thông báo không còn phù hợp với người dùng (ví dụ: người dùng đã đọc thông báo trên trang web, trong trường hợp ứng dụng nhắn tin hoặc bài hát sau đang phát trong ứng dụng nhạc để thông báo khi thay đổi bài hát) . Hầu hết các trình duyệt hiện đại sẽ tự động loại bỏ thông báo sau một vài giây (khoảng bốn giây) nhưng đây không phải là điều bạn thường quan tâm vì nó phụ thuộc vào người dùng và tác nhân người dùng. Việc sa thải cũng có thể xảy ra ở cấp hệ điều hành và người dùng nên kiểm soát việc này. Các phiên bản cũ của Chrome không tự động xóa thông báo để bạn chỉ có thể làm như vậy sau các phiên bản cũ để không xóa thông báo khỏi khay thông báo trên các trình duyệt khác.

Có bốn sự kiện được kích hoạt trên ví dụ:clickKích hoạt khi người dùng nhấp vào thông báo.closeKích hoạt một khi thông báo được đóng lại.errorKích hoạt nếu có gì đó không đúng với thông báo; điều này thường là do thông báo không thể được hiển thị vì một số lý do.showKích hoạt khi thông báo được hiển thị cho người dùng.

Những sự kiện này có thể được theo dõi bằng cách sử dụng , , , và xử lý. Bởi vì cũng thừa hưởng từ , nên có thể sử dụng phương pháp trên nó.

Slack
IndexedDB
Tải xuống mã danh sách Công việc
xem ứng dụng đang chạy trực tiếp
<iframe>
Notification.permission
Notification.requestPermission()
Notification.requestPermission()
vấn đề 274.284
Notification
icon
body
close()
setTimeout()
Notification
onclick
onclose
onerror
onshow
Notification
EventTarget
addEventListener()
thông báo API
16KB
to-do-notifications-gh-pages.zip
archive