Huy hiệu được dùng để truyền đạt thông tin không khẩn cấp cho người dùng. Ví dụ: chúng được dùng để cho biết trạng thái của một ứng dụng hoặc số lượng mục chưa đọc. Cách cổ điển để tạo huy hiệu ứng dụng là thêm một số vào biểu tượng trang web. Trên các trình duyệt hiện đại, sau khi cài đặt ứng dụng, có một cách tích hợp để thêm huy hiệu vào biểu tượng ứng dụng trong thanh tác vụ của hệ điều hành.
Phong cách hiện đại
Sử dụng phương thức navigator.setAppBadge()
Phương thức navigator.setAppBadge()
đặt một huy hiệu trên biểu tượng liên kết với ứng dụng đã cài đặt. Phương thức này sẽ lấy một đối số duy nhất không bắt buộc, là một số nguyên sẽ được dùng làm giá trị của huy hiệu. Khi bạn đặt số thành 0, huy hiệu ứng dụng sẽ bị xoá. Nếu không cung cấp đối số, thì bạn sẽ nhận được một huy hiệu chung, thường hiển thị dưới dạng dấu chấm có màu.
Cách cổ điển
Thêm một số vào biểu tượng trang web
Nếu chưa cài đặt ứng dụng, bạn có thể thêm số vào biểu tượng trang web. Có nhiều cách để thực hiện việc này, chẳng hạn như bằng cách linh động vẽ biểu tượng trang web vào canvas sau khi thêm thông tin huy hiệu và hiển thị dưới dạng URL Blob, hoặc tạo hình ảnh SVG với thông tin huy hiệu dưới dạng URL dữ liệu.
Cải tiến tăng dần
Đoạn mã dưới đây sử dụng phần tử tuỳ chỉnh <favicon-badge></favicon-badge>
, cho phép nhà phát triển khai báo huy hiệu trên biểu tượng trang web được chỉ định thông qua thuộc tính src
bằng cách truyền một số nguyên vào thuộc tính badge
. Khi người dùng cài đặt ứng dụng, huy hiệu sẽ được "nâng cấp" thành huy hiệu của hệ điều hành gốc.
import 'https://unpkg.com/favicon-badge@2.0.0/dist/FavIconBadge.js';
// DOM references.
const favicon = document.querySelector('favicon-badge');
const installButton = document.querySelector('button');
// Feature detection.
const supportsAppBadge = 'setAppBadge' in navigator;
let setAppBadge;
// For the demo simply set the badge between [0, 9].
let i = 0;
const getAppBadgeValue = () => {
if (i > 9) {
i = 0;
}
return i++;
};
// Set the badge on the favicon.
const setAppBadgeFavicon = (value) => {
favicon.badge = value;
};
// Set the native operating system badge.
const setAppBadgeNative = (value) => {
navigator.setAppBadge(value);
}
// If the app is installed and the Badging API is supported,
// set the badge on the native operating system. Else, fall
// back to the favicon.
if (
matchMedia('(display-mode: standalone)').matches &&
supportsAppBadge
) {
setAppBadge = setAppBadgeNative;
} else {
setAppBadge = setAppBadgeFavicon;
}
// Set a new badge every second.
setInterval(() => {
setAppBadge(getAppBadgeValue());
}, 1000);
// If installation is supported…
if ('BeforeInstallPromptEvent' in window) {
let installEvent = null;
const onInstall = () => {
// After installation, "upgrade" to the native operating system badge.
installButton.disabled = true;
installEvent = null;
if (supportsAppBadge) {
favicon.badge = false;
setAppBadge = setAppBadgeNative;
}
};
// …listen for the `beforeinstallprompt` event.
window.addEventListener('beforeinstallprompt', (event) => {
event.preventDefault();
installEvent = event;
installButton.disabled = false;
});
// Deal with installation.
installButton.addEventListener('click', async () => {
if (!installEvent) {
return;
}
installEvent.prompt();
const result = await installEvent.userChoice;
if (result.outcome === 'accepted') {
onInstall();
}
});
// Listen for the `appinstalled` in case the user installs the app manually.
window.addEventListener('appinstalled', (event) => {
onInstall();
});
}
Tài liệu đọc thêm
Bản minh hoạ
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="manifest" href="manifest.json" />
<title>How to create an app badge</title>
<link rel="stylesheet" href="style.css" />
<!-- TODO: Devsite - Removed inline handlers -->
<!-- <script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', async () => {
const registration = await navigator.serviceWorker.register(
'sw.js',
);
console.log(
'Service worker registered for scope',
registration.scope,
);
});
}
</script>
<script src="script.js" type="module"></script> -->
</head>
<body>
<h1>How to create an app badge</h1>
<ol>
<li>
Watch the favicon. You should see a counter that updates each second
integrated into the favicon.
<img
src="../favicon.png"
style="width: 250px; height: auto"
width="528"
height="74"
alt="Favicon with counter."
/>
</li>
<li>
Install the app by clicking the button below. After the installation,
the button is disabled.
<p>
<button disabled type="button">Install</button>
</p>
</li>
<li>
Watch the app icon in your operating system's task bar. You should see a
counter that updates each second as an app badge.
<img
src="../app-badge.png"
style="width: 80px; height: auto"
width="282"
height="388"
alt="App badge with counter."
/>
</li>
</ol>
<favicon-badge src="../favicon.svg" textColor="#fff" badge="" />
</body>
</html>
html {
box-sizing: border-box;
font-family: system-ui, sans-serif;
color-scheme: dark light;
}
*, *:before, *:after {
box-sizing: inherit;
}
body {
margin: 1rem;
}
img {
height: auto;
max-width: 100%;
display: block;
}
import 'https://unpkg.com/favicon-badge@2.0.0/dist/FavIconBadge.js';
// The `