نشان ها برای انتقال اطلاعات غیر فوری به کاربر استفاده می شوند. به عنوان مثال، از آنها برای نشان دادن وضعیت یک برنامه یا تعداد موارد خوانده نشده استفاده می شود. روش کلاسیک ایجاد نشان برنامه، افزودن یک عدد به فاویکون است. در مرورگرهای مدرن، پس از نصب یک برنامه، یک راه داخلی برای اضافه کردن یک نشان به نماد برنامه در نوار وظیفه سیستم عامل وجود دارد.
روش مدرن
با استفاده از متد navigator.setAppBadge()
روش navigator.setAppBadge()
یک نشان روی نماد مرتبط با برنامه نصب شده تنظیم می کند. این روش یک آرگومان منفرد اختیاری می گیرد که یک عدد صحیح است که به عنوان مقدار نشان استفاده می شود. تنظیم عدد روی 0 نشان برنامه را پاک می کند. عدم ارائه آرگومان منجر به یک نشان عمومی می شود که معمولاً به صورت یک نقطه رنگی نمایش داده می شود.
روش کلاسیک
اضافه کردن یک عدد به فاویکون
اگر برنامه هنوز نصب نشده است، می توانید شماره ای را به فاویکون اضافه کنید. راه های زیادی برای انجام این کار وجود دارد، به عنوان مثال، با کشیدن فاویکون به صورت پویا روی بوم با اطلاعات نشان اضافه شده و نمایش آن به عنوان URL Blob، یا ایجاد یک تصویر SVG با اطلاعات نشان به عنوان URL داده.
افزایش پیشرونده
قطعه زیر از یک عنصر سفارشی <favicon-badge></favicon-badge>
استفاده میکند که به توسعهدهنده این امکان را میدهد تا با ارسال یک عدد صحیح به ویژگی badge
، نشانی را بر روی فاویکون مشخص شده از طریق ویژگی src
تعیین کند. هنگامی که کاربر برنامه را نصب می کند، نشان به یک نشان سیستم عامل بومی "ارتقا" می شود.
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 `