| Component name | vendor |
|---|---|
| In the visitorId | yes |
| structuredId group | browser (engine and build) |
| Hashing | plain value; a digest only when longer than 128 characters or not printable ASCII |
| Excluded under | no browser class |
| Inner timeout | 1000 ms |
| Added in | signalsVersion 1 |
Browsers report a vendor name to web pages. Chromium-based browsers say Google, Safari and every browser on iPhone say Apple, and Firefox says nothing. WhiskerJS records that short string. On its own it only splits browsers into three big families, but it is stable and is checked against other values for signs of spoofing.
What it reads
navigator.vendor, a string.
How the technique works
The property is read once. An empty string is reported as the word empty; any other string as it is; a non-string gives unavailable. A throwing getter reaches the runner and gives blocked.
Why it helps
It is one of the clearest engine hints a page can read: Google Inc. for Chromium browsers, Apple Computer, Inc. for WebKit, empty for Gecko. It feeds browser_class, and because it is in the id, a tool that changes it changes the id.
Its most useful role on your server is as a cross-check. A result whose vendor is Google Inc. while the request’s user agent header names Safari, or whose vendor is empty while ua_client_hints is available (only Chromium offers it), describes a browser that is not what it claims. WhiskerJS never draws that conclusion itself; it gives you the values.
Stability
Fixed per engine family. It changes only when the browser changes engine, or a user agent switcher changes it.
Browser support and what blocks it
| Browser | Typical value |
|---|---|
| Chrome, Edge, Brave, Samsung Internet | Google Inc. |
| Safari and every iOS browser | Apple Computer, Inc. |
| Firefox | empty |
No browser class excludes it.
Privacy
A family name shared by every user of that engine. Nothing personal.
How WhiskerJS handles noise and failures
| Status | ruleId | When |
|---|---|---|
ok |
the vendor string, or empty |
|
unavailable |
no_api |
not a string |
blocked |
threw, security_error |
the getter throws |
excluded |
caller_excluded |
you excluded it |
timed_out |
timeout, aborted |
budget or abort |
vendor is also compared with a clean iframe by iframe_mismatch and watched by navigator_own_property. The engine_mismatch flag checks whether the class it helped pick matches how the engine behaves.
Example value
In the container test: headless Chromium Google Inc., Firefox empty, WebKit Apple Computer, Inc..
Questions and answers
Why does Firefox report empty?
Firefox returns an empty string for navigator.vendor. WhiskerJS writes it as the word empty so that it is a visible, ok value rather than looking like a missing one.
Why do all iPhone browsers say Apple Computer, Inc.?
They all run on WebKit, which reports that vendor. It is one reason WhiskerJS classes every iOS browser as safari.