התגים משמשים להעברת מידע לא דחוף למשתמשים. לדוגמה, הם משמשים לציון הסטטוס של אפליקציה או מספר הפריטים שלא נקראו. הדרך הקלאסית ליצירת תג לאפליקציה היא להוסיף מספר לסמל האתר. בדפדפנים מודרניים, אחרי שמתקינים אפליקציה, יש דרך מובנית להוסיף תג לסמל האפליקציה בשורת המשימות של מערכת ההפעלה.
הדרך המודרנית
באמצעות השיטה navigator.setAppBadge()
השיטה navigator.setAppBadge()
מגדירה תג על הסמל שמשויך לאפליקציה שמותקנת. השיטה משתמשת בארגומנט אופציונלי יחיד, שהוא מספר שלם שישמש כערך התג. הגדרת המספר כ-0 תגרום למחיקה של תג האפליקציה. אם לא מוסיפים ארגומנט, מקבלים תג גנרי, שמוצג בדרך כלל כנקודה צבעונית.
הדרך הקלאסית
הוספת מספר לסמל האתר
אם האפליקציה עדיין לא מותקנת, אפשר להוסיף מספר לסמל האתר. יש הרבה דרכים לעשות זאת, למשל, לצייר באופן דינמי את סמל האתר על קנבס עם פרטי התג ולהציג אותו ככתובת URL של כדור הארץ, או ליצור תמונת SVG עם פרטי התג ככתובת URL של נתונים.
שיפור הדרגתי
קטע הקוד שלמטה משתמש ברכיב מותאם אישית <favicon-badge></favicon-badge>
שמאפשר למפתח להגדיר באופן מוצהר תג בסמל האתר שצוין באמצעות המאפיין src
, על ידי העברת מספר שלם למאפיין badge
. כשהמשתמש מתקין את האפליקציה, התג "משודרג" לתג של מערכת הפעלה מקורית.
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();
});
}
קריאה נוספת
הדגמה (דמו)
<!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 `