Chrome 以及其他主要瀏覽器即將凍結User-Agent 字符串,這引發了廣泛關注。這意味著User-Agent 字符串仍然存在(出現在請求頭中,並可在JavaScript 中通過navigator.userAgent
訪問),但其用於檢測瀏覽器/平台/版本的功能將隨著時間的推移而降低。谷歌官方解釋此舉是為了保護用戶隱私,防止指紋識別。
前端開發領域一直建議:避免User-Agent 探測。許多網站錯誤地使用User-Agent 探測,導致弊大於利。避免User-Agent 探測的最佳方法是:基於實際需求進行測試。
需要測試瀏覽器是否支持特定功能?直接測試該功能,而不是依賴於假設該瀏覽器應該支持該功能的抽象概念。
在JavaScript 中,許多功能的測試非常簡單,只需檢測其API 是否存在:
if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition); } else { console.warn("Geolocation not supported"); }
在CSS 中,可以使用@supports
原生機制:
@supports (display: grid) { .main { display: grid; } }
這可以通過返回布爾值的JavaScript API 來檢測:
CSS.supports("display: flex");
並非所有Web 平台功能都如此易於測試,但通常無需User-Agent 探測即可完成測試。如果遇到困難,可以查看Modernizr 是否提供相應的測試,Modernizr 是功能測試的黃金標準,因為它經過了充分的測試,並處理了您可能無法預見的邊緣情況。使用Modernizr 庫可以獲得清晰的邏輯分支:
if (Modernizr.requestanimationframe) { // 支持} else { // 不支持}
如果確實需要知道瀏覽器類型、平台和版本,可以使用User-Agent Client Hints (UA-CH)。
例如,要獲取平台信息,可以在請求中設置Sec-CH-Platform
頭,理論上,可以在響應中獲取該信息。這需要主動請求信息,從而避免了有問題的隱私指紋識別問題。類似地,還有Sec-CH-Mobile
頭用於檢測移動設備,但這引發了一些疑問:誰來決定什麼是“移動”設備?我們應該如何根據此信息做出決策?
在服務器端了解瀏覽器、平台和版本信息通常也是可取的(在不同情況下發送不同的代碼),這與客戶端一樣重要,但服務器端無法進行測試。凍結的User-Agent 字符串應該能夠維持足夠長的時間,以便服務器端能夠遷移到使用UA-CH。
Jon Arne Sæterås 對此表示擔憂:
我在移動Web 領域工作了15 多年,我知道許多大大小小的網站都依賴於基於User-Agent 頭的設備檢測。從Google 的角度來看,切換到UA-CH 似乎很容易,但這正是推動這一變化的團隊沒有理解其影響的地方:
基於設備檢測的功能至關重要,應用廣泛,不僅存在於前端代碼中。大型軟件系統及其後端代碼依賴於設備檢測,整個基礎設施堆棧也是如此。
在我的主要代碼庫中,我們進行少量服務器端UA 檢測。我們使用一個名為Browser 的Rails gem,它以友好的API 方式公開UA 派生的信息。我可以這樣寫:
if browser.safari? # Safari 代碼end
我們還在客戶端公開該gem 中的信息,以便在客戶端使用。前端和後端只有少數幾個使用實例,這些實例似乎都可以通過其他方式輕鬆處理。
過去,將前端信息以在第一頁加載時有用的方式傳遞回服務器有點棘手(因為UA 不知道視口大小等信息)。我記得我做過一些非常巧妙的操作,加載一個骨架頁面,執行一小段JavaScript 代碼來測量視口寬度和屏幕大小,然後設置一個cookie 並強制刷新頁面。如果存在cookie,服務器將擁有所需的信息,並且在這些請求中根本不會加載骨架頁面。
這很複雜,但服務器可以獲取服務器端的視口寬度信息,這對於發送小屏幕資源(例如不同的HTML)等操作非常有用,否則這是不可能的。
我之所以提到這一點,是因為UA-CH 不應與普通的客戶端提示混淆。我們應該能夠配置服務器發送Accept-CH
頭,然後讓客戶端代碼將要發送回的信息列入白名單,例如:
<meta content="DPR, Viewport-Width" http-equiv="Accept-CH">
這意味著服務器可以在後續頁面加載中獲取客戶端的這些信息。這是一個不錯的API,但Firefox 和Safari 不支持它。如果這兩個瀏覽器都因為凍結的UA 字符串而對UA-CH 表示興趣,我想知道它是否會得到提升。
以上是凍結用戶代理字符串的詳細內容。更多資訊請關注PHP中文網其他相關文章!

具有CSS的自定義光標很棒,但是我們可以將JavaScript提升到一個新的水平。使用JavaScript,我們可以在光標狀態之間過渡,將動態文本放置在光標中,應用複雜的動畫並應用過濾器。

互動CSS動畫和元素相互啟動的元素在2025年似乎更合理。雖然不需要在CSS中實施乒乓球,但CSS的靈活性和力量的增加,可以懷疑Lee&Aver Lee有一天會成為一種

有關利用CSS背景濾波器屬性來樣式用戶界面的提示和技巧。您將學習如何在多個元素之間進行背景過濾器,並將它們與其他CSS圖形效果集成在一起以創建精心設計的設計。

好吧,事實證明,SVG的內置動畫功能從未按計劃進行棄用。當然,CSS和JavaScript具有承載負載的能力,但是很高興知道Smil並沒有像以前那樣死在水中

是的,讓#039;跳上文字包裝:Safari Technology Preview In Pretty Landing!但是請注意,它與在鉻瀏覽器中的工作方式不同。

此CSS-tricks更新了,重點介紹了年鑑,最近的播客出現,新的CSS計數器指南以及增加了幾位新作者,這些新作者貢獻了有價值的內容。

在大多數情況下,人們展示了@Apply的@Apply功能,其中包括Tailwind的單個property實用程序之一(會改變單個CSS聲明)。當以這種方式展示時,@Apply聽起來似乎很有希望。如此明顯


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。