Signal · signalsVersion 5

screen_frame

The space the system keeps at each screen edge for the taskbar, dock or menu bar, as top,right,bottom,left in CSS pixels. Not in either id.

screen_frame at a glance (from the library code, signalsVersion 5)
Component namescreen_frame
In the visitorIdno (reported, kept out of both ids)
structuredId groupnone
Hashingplain value; a digest only when longer than 128 characters or not printable ASCII
Excluded underFirefox resistFingerprinting and Tor Browser (firefox_rfp)
Inner timeout1000 ms
Added insignalsVersion 2
In plain words

Your operating system keeps part of the screen for itself: the Windows taskbar, the macOS menu bar and Dock, a Linux panel. Browsers tell pages how much of the screen is available, so the difference shows how big that frame is and on which edge. WhiskerJS reports it as four numbers but keeps it out of the identifiers, because people move and hide their taskbars.

What it reads

From window.screen: width, height, availWidth, availHeight, and, where the browser has them, availTop and availLeft.

How the technique works

  1. All four of width, height, availWidth, availHeight must be finite numbers, otherwise unavailable.
  2. top is availTop (0 when missing), left is availLeft (0 when missing).
  3. right is width - availWidth - left, bottom is height - availHeight - top.
  4. The four values are rounded and written as top,right,bottom,left.

Why it helps

The frame follows the operating system and the user’s layout: a 48 px taskbar at the bottom (0,0,48,0) is typical of Windows, a menu bar at the top is typical of macOS, and many setups are custom. It is useful context for your server and a consistency check against the platform.

Read it together with screen_resolution and platform: a frame that fits the platform (a bottom taskbar on Windows, a top menu bar on macOS) is ordinary, while a desktop user agent with no frame at all is common in virtual machines, kiosks and headless setups.

Stability

Medium to low. It changes when the taskbar or dock is moved, resized or set to hide, and with multiple monitors (on some systems availTop and availLeft are positions within a larger desktop, which then shows up here). That is why it is outside both ids.

Browser support and what blocks it

  • Available in all current browsers. Phones and tablets often report 0,0,0,0 or a small top frame for the status bar, depending on the browser.
  • Firefox resistFingerprinting and Tor Browser: excluded / firefox_rfp: there the available area is reported equal to the screen. “No taskbar space” is also one of the traits WhiskerJS needs before it classes a Firefox as firefox_rfp.

Privacy

It reveals the user’s screen layout preference (taskbar position and size), nothing more. It is not in an id.

How WhiskerJS handles noise and failures

Status ruleId When
ok top,right,bottom,left
unavailable no_api no screen, or a size is not a finite number
excluded firefox_rfp browser class firefox_rfp
excluded caller_excluded you excluded it
timed_out timeout, aborted budget or abort

Example value

All three headless test browsers in the container reported 0,0,0,0 (no taskbar on a virtual display). A Windows laptop with a bottom taskbar typically reports something like 0,0,48,0.

Questions and answers

Why is screen_frame not in the id?

It changes when the user moves or resizes the taskbar or dock, hides it, or the window is on another monitor. That is too common for an identifier.

What does 0,0,0,0 mean?

The browser reports no space kept by the system: for example a phone, a full-screen setup, a headless browser, or a browser that normalises the available area.