Plakietki służą do przekazywania użytkownikowi informacji, które nie są pilne. Służą np. do wskazywania stanu aplikacji lub liczby nieprzeczytanych elementów. Klasycznym sposobem tworzenia plakietki aplikacji jest dodanie liczby do favikony. W nowoczesnych przeglądarkach po zainstalowaniu aplikacji można dodać plakietkę do ikony aplikacji na pasku zadań systemu operacyjnego.
Nowoczesny sposób
Za pomocą metody navigator.setAppBadge()
Metoda navigator.setAppBadge()
ustawia plakietkę na ikonie powiązanej z zainstalowaną aplikacją. Metoda przyjmuje opcjonalny pojedynczy argument, który jest liczbą całkowitą, która zostanie użyta jako wartość plakietki. Ustawienie liczby na 0 usuwa plakietkę aplikacji. Brak argumentu powoduje, że wyświetla się plakietka ogólna, często wyświetlana w formie kolorowej kropki.
Klasyczny sposób
Dodawanie numeru do favikony
Jeśli aplikacja nie jest jeszcze zainstalowana, możesz dodać liczbę do favikony. Można to robić na wiele sposobów, na przykład przez dynamiczne rysowanie favikony do obszaru roboczego z dodaną informacją o plakietce i wyświetlanie jej w postaci adresu URL obiektu blob lub utworzenie obrazu SVG z informacjami o plakietce jako adresem URL danych.
Stopniowe ulepszanie
W poniższym fragmencie kodu używany jest element niestandardowy <favicon-badge></favicon-badge>
, który umożliwia deweloperowi deklaratywne ustawienie plakietki na favikonie określonej w atrybucie src
przez przekazanie liczby całkowitej do atrybutu badge
. Gdy użytkownik zainstaluje aplikację, plakietka zostanie zmieniona na plakietkę natywnego systemu operacyjnego.
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();
});
}
Więcej informacji
Wersja demonstracyjna
<!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 `