toolfree

我在用什麼瀏覽器

顯示你的瀏覽器、排版引擎、作業系統與 User-Agent 字串,以及瀏覽器實際支援哪些功能。說明為何字串只是猜測、功能偵測才不是。

在你的瀏覽器中執行

瀏覽器
排版引擎
作業系統
語言
時區
CPU 核心數
裝置記憶體
網路連線
Cookie 已啟用
Do Not Track

上面的瀏覽器與系統是從 User-Agent 字串讀出來的,而每一種瀏覽器都刻意在這個字串裡造假。請當成一個還不錯的猜測。

User-Agent 字串
功能支援

上半部是猜的

上面的瀏覽器、引擎與系統,都是從你的 User-Agent 字串讀出來的,而那個字串不是事實陳述。 每一種瀏覽器都刻意宣稱自己是好幾種別的瀏覽器,理由是三十年前的相容性問題。

Mac 上的 Chrome 會說:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36

這是一個瀏覽器同時宣稱自己是 Mozilla、AppleWebKit、KHTML、Gecko 與 Safari,而它一個都不是。 這個慣例始於當年網站會先檢查是不是 Netscape 才提供框架,於是後來每一個瀏覽器都把前一個的名字 加進去以免被擋掉,之後就再也停不下來了。

要解析它,就得依正確的順序去測那些冒名者——Edge 要排在 Chrome 前面,Chrome 要排在 Safari 前面 ——並且接受一件事:新出現的瀏覽器會被誤判成它模仿的那一個。

字串講不出來的事

iPad 會說自己是 Mac。 自 iPadOS 13 起,它的字串和 macOS 上的 Safari 完全相同。唯一剩下的 線索是有沒有觸控支援,這就是本頁把兩者並列的原因。

iOS 上的每個瀏覽器都是 Safari 的引擎。 iPhone 上的 Chrome、Firefox 與 Edge 都必須使用 WebKit,差別只在字串裡的品牌名。看到 CriOS,那是 Chrome 的介面套在 Safari 的引擎上。

版本號正在被凍結。 Chrome 與 Edge 已經縮減回報內容:次要版本號被歸零,平台資訊被泛化。 這是為了降低指紋辨識,也代表這個字串正在刻意變得更沒有資訊量。

功能支援才是答案

下方那份清單是瀏覽器實際做得到什麼,直接測出來的,不是推論的。這才是 User-Agent 字串被拿來 回答的那些問題的正確答案:

// 脆弱——新瀏覽器出現、或字串改了就壞
if (/Safari/.test(navigator.userAgent)) { … }

// 正確——問的就是你真正想問的
if ('showOpenFilePicker' in window) { … }

功能偵測不可能對「現在」判斷錯誤。UA 判別則是在猜「這個名字代表支援哪些功能」,而每當某個瀏覽器 新增能力、或有新瀏覽器出現,它就錯一次。

這個字串只有兩種誠實的用途:告訴人類他正在用哪一個瀏覽器——也就是這一頁在做的事——以及 繞過某個特定版本裡有紀錄的特定臭蟲。除此之外都該用功能偵測。

User-Agent Client Hints

Chromium 系的瀏覽器透過 navigator.userAgentData 把同樣的資訊以結構化資料提供,敏感的部分要 另外索取。它解決了解析的問題,沒有解決信任的問題:瀏覽器在那裡一樣可以回報任何它想回報的東西。

Firefox 與 Safari 都沒有實作,所以那個字串短期內不會消失。

其他幾項讀數

讀數但書
語言你的 Accept-Language 順序,網站用它挑語系
時區從你的系統時鐘推得,不是從你的位址
CPU 核心數可能被上限或取整,以降低指紋辨識
裝置記憶體只有 Chromium 有,而且刻意粗略——超過 8 一律回報 8
Do Not Track幾乎沒有網站理會,且正被瀏覽器移除

Do Not Track 值得多說一句。它從來只是請求而非要求,而在幾乎沒有網站遵守的情況下,送出這個標頭 反而讓瀏覽器更容易被識別,而不是更難。多數瀏覽器現在已經拿掉這個設定了。

這裡沒有任何東西被送出去

每一個數值都是從你自己的瀏覽器讀出來再顯示的。這一頁沒有伺服器端。這件事有點諷刺:一個講「你的 瀏覽器洩漏了什麼」的頁面,正好是把這些全部留在原地的頁面。