在不同位置(客户端的终端设备,服务端,项目代码中)判断设备类型(PC、手机、微信等)
判斷設備類型的地方有很多,比如在服務端通過 Nginx 或 Apache 等判斷,在項目中通過 UserAgent 判斷。這個網站上有各種開源的解決方案
現在的移動設備類型比較一致了,只需要判斷安卓、蘋果兩種類型即可。
1. 通過 JavaScript 判斷設備類型
對于靜態頁面構成的項目(比如 GitHub 的個人首頁,只能上傳靜態頁面),如果需要判斷設備類型,那就得在終端設備上通過 JavaScript 實現。
Navigator 對象 詳細文檔參考這里:
Navigator 對象表示瀏覽器的狀態和標識,允許 JavaScript 腳本查詢其中的信息。其中的 userAgent 屬性是一個聲明了瀏覽器用于 HTTP 請求的用戶代理頭的字符串。下圖是 Chrome 瀏覽器的 console 打印出來的信息:
對比 UserAgent
可以通過判斷 navigator.userAgent 里面是否有某些值來判斷設備類型。比如蘋果手機有 iPhone 字段,Windows 系統的 PC 有 Windows 字段。
- PC 版的 UserAgent 屬性:userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
- 模擬手機版的 UserAgent 屬性:serAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"
具體代碼
通過正則表達式,可以把各種想識別的移動設備用 UserAgent 匹配出來。下面的例子(正則的 i 表示忽略大小寫)匹配了安卓設備、蘋果手機和平板、黑莓設備,如果終端確實是這些設備中的一種,則 is_pc 變量為 true,否則為 false。
var is_mobile = /Android|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent);也可以利用字符串的 indexOf 方法去判斷。
2. 通過 Nginx 判斷設備類型
如果不同版本的項目是不同的團隊做的,那在服務器進行跳轉就很合適了。
下面的例子中,在 Nginx 配置文件中增加一個變量 $is_mobile 標志設備類型,通過正則表達式匹配 UserAgent 實現設備類型的判斷。
3. 項目代碼判斷設備類型(以 PHP 為例)
PHP 通過 $_SERVER 儲存各類客戶設備的信息。其中的 $_SERVER['HTTP_USER_AGENT'] 是客戶設備的 UserAgent。
3.1 通過 UserAgent 判斷
PHP 中通過 UserAgent 判斷設備類型的方法和 JavaScript 類似,可以用正則表達式簡單實現,設備類型匹配到后 $is_mobile 變量為 true:
$is_mobile = preg_match("/Android|iPhone|iPad|iPod|BlackBerry/i", $userAgent);3.2 通過 HTTP_X_WAP_PROFILE 判斷
如果 $_SERVER 中有 HTTP_X_WAP_PROFILE 則一定是移動設備。
$is_mobile = isset ($_SERVER['HTTP_X_WAP_PROFILE']);3.3 生產環境中往往綜合以上方法來判斷
function isMobile() { // 如果有 HTTP_X_WAP_PROFILE 則一定是移動設備if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) {return true;}// 判斷手機發送的客戶端標志 UserAgentif (isset ($_SERVER['HTTP_USER_AGENT'])) {return preg_match("/(" . implode('|', $clientkeywords) . ")/i", $_SERVER['HTTP_USER_AGENT'])) ? true : false;} }4. 判斷是否在微信中
微信的 UserAgent 中有一個標志 MicroMessenger,通過這個標識可以識別微信。
PHP 示例,在微信中時 $is_wx 為 true:
$is_wx = preg_match("/MicroMessenger/i", $_SERVER['HTTP_USER_AGENT']);JavaScript 示例,在微信中時 is_wx 為 true:
var is_wx = /MicroMessenger/i.test(navigator.userAgent);總結
以上是生活随笔為你收集整理的在不同位置(客户端的终端设备,服务端,项目代码中)判断设备类型(PC、手机、微信等)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MYSQL 基础篇(补)
- 下一篇: 小程序转uni-app——条件判断包含中