fingerprintjs
25 строк · 916.0 Байт
1const maxValueToCheck = 100
2
3/**
4* If the display is monochrome (e.g. black&white), the value will be ≥0 and will mean the number of bits per pixel.
5* If the display is not monochrome, the returned value will be 0.
6* If the browser doesn't support this feature, the returned value will be undefined.
7*
8* @see https://developer.mozilla.org/en-US/docs/Web/CSS/@media/monochrome
9*/
10export default function getMonochromeDepth(): number | undefined {
11if (!matchMedia('(min-monochrome: 0)').matches) {
12// The media feature isn't supported by the browser
13return undefined
14}
15
16// A variation of binary search algorithm can be used here.
17// But since expected values are very small (≤10), there is no sense in adding the complexity.
18for (let i = 0; i <= maxValueToCheck; ++i) {
19if (matchMedia(`(max-monochrome: ${i})`).matches) {
20return i
21}
22}
23
24throw new Error('Too high value')
25}
26