يتم استخدام الشارات لنقل معلومات غير عاجلة إلى المستخدم. على سبيل المثال، تُستخدم للإشارة إلى حالة تطبيق ما أو عدد العناصر غير المقروءة. الطريقة الكلاسيكية لإنشاء شارة تطبيق هي إضافة رقم إلى الرمز المفضّل. في المتصفحات الحديثة، بعد تثبيت تطبيق ما، توجد طريقة مضمنة لإضافة شارة إلى أيقونة التطبيق في شريط مهام نظام التشغيل.
الطريقة الحديثة
استخدام طريقة navigator.setAppBadge()
تضع الطريقة navigator.setAppBadge()
شارة على الرمز المرتبط بالتطبيق المثبَّت. وتتخذ الطريقة وسيطة واحدة اختيارية، وهي عبارة عن عدد صحيح سيتم استخدامه كقيمة للشارة. يؤدي تعيين الرقم على 0
إلى محو شارة التطبيق. يؤدي عدم تقديم وسيطة إلى الحصول على شارة عامة،
تظهر عادةً كنقطة ملونة.
الطريقة الكلاسيكية
إضافة رقم إلى الرمز المفضّل
إذا لم يكن التطبيق مثبّتًا بعد، يمكنك إضافة رقم إلى الرمز المفضّل. وهناك العديد من الطرق لإجراء ذلك، على سبيل المثال، من خلال رسم الرمز المفضّل بشكل ديناميكي على لوحة مع إضافة معلومات الشارة وعرضه كعنوان URL لنسخة Blob، أو من خلال صياغة صورة 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 `