Badges dienen dazu, Nutzern Informationen zu vermitteln, die nicht dringend sind. Sie werden beispielsweise verwendet, um den Status einer App oder die Anzahl der ungelesenen Elemente anzugeben. Die klassische Methode zum Erstellen eines App-Badges besteht darin, dem Favicon eine Zahl hinzuzufügen. In modernen Browsern gibt es nach der Installation einer Anwendung eine integrierte Möglichkeit, dem App-Symbol in der Taskleiste des Betriebssystems ein Logo hinzuzufügen.
Die moderne Art
navigator.setAppBadge()
-Methode verwenden
Mit der Methode navigator.setAppBadge()
wird ein Logo für das Symbol festgelegt, das der installierten Anwendung zugeordnet ist. Die Methode verwendet ein optionales einzelnes Argument. Dabei handelt es sich um eine Ganzzahl, die als Wert des Logos verwendet wird. Wird die Zahl auf 0 gesetzt,
wird das App-Badge gelöscht. Wird kein Argument angegeben, wird ein generisches Abzeichen angezeigt, das in der Regel als farbiger Punkt angezeigt wird.
Klassisch
Nummer zum Favicon hinzufügen
Wenn die App noch nicht installiert ist, können Sie dem Favicon eine Nummer hinzufügen. Dafür gibt es viele Möglichkeiten, zum Beispiel, indem Sie das Favicon dynamisch auf einen Canvas ziehen, in dem die Badge-Informationen hinzugefügt und als Blob-URL angezeigt werden, oder ein SVG-Bild mit den Badge-Informationen als Daten-URL erstellen.
Progressive Enhancement
Im folgenden Snippet wird ein benutzerdefiniertes Element <favicon-badge></favicon-badge>
verwendet, mit dem der Entwickler deklarativ ein Badge für das über das Attribut src
angegebene Favicon festlegen kann, indem eine Ganzzahl an das Attribut badge
übergeben wird. Wenn der Nutzer die App installiert, wird das Logo in ein natives Betriebssystem-Logo aktualisiert.
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();
});
}
Weitere Informationen
Demo
<!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 `