通過UA來判斷不同的設備或者瀏覽器是開發者最常用的方式方法微信小程序判斷字符串,而對于微信開發和小程序也是同樣的一個情況,我們可以通過微信內置瀏覽器User Agent信息來判斷其具體類型或者設備。
所以子凡就通過徒兒和兄弟們的不同手機設備收集了一些微信內置瀏覽器的 UA,收集其主要目的是為了解決網站在小程序中打開博客頁面后若頁面有載入廣告,在 設備上會被直接攔截而導致無法訪問。由于子凡移動端站點的頁面是通過 js 方式插入廣告代碼,而且淚雪博客也使用了靜態緩存,所以就無法直接使用 PHP 的方式來禁止廣告代碼,所以依舊選擇用 代碼來做個微信 UA 的判斷。
系統下的微信 User Agent
1
2
3
4
5
Mozilla/5.0 (Linux; Android 7.1.1; MI 6 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043807 Mobile Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN
Mozilla/5.0 (Linux; Android 7.1.1; OD103 Build/NMF26F; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN
Mozilla/5.0 (Linux; Android 6.0.1; SM919 Build/MXB48T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN
Mozilla/5.0 (Linux; Android 5.1.1; vivo X6S A Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN
Mozilla/5.0 (Linux; Android 5.1; HUAWEI TAG-AL00 Build/HUAWEITAG-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043622 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN
系統下的微信 User Agent
1
2
3
4
Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69 MicroMessenger/6.6.1 NetType/4G Language/zh_CN
Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_2 like Mac OS X) AppleWebKit/604.4.7 (KHTML, like Gecko) Mobile/15C202 MicroMessenger/6.6.1 NetType/4G Language/zh_CN
Mozilla/5.0 (iPhone; CPU iPhone OS 11_1_1 like Mac OS X) AppleWebKit/604.3.5 (KHTML, like Gecko) Mobile/15B150 MicroMessenger/6.6.1 NetType/WIFI Language/zh_CN
Mozilla/5.0 (iphone x Build/MXB48T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN
微信內置瀏覽器與小程序中的 User Agent 對比
1
2
3
4
// 安卓系統中小程序 User Agent
Mozilla/5.0 (Linux; Android 7.1.1; MI 6 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043807 Mobile Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN miniProgram
// 安卓系統中微信內置瀏覽器 User Agent
Mozilla/5.0 (Linux; Android 7.1.1; MI 6 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043807 Mobile Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN
以上兩段字符串均為子凡自用 MI6 安卓設備中獲得,可以看出微信小程序的 UA 是和微信內置瀏覽器 UA 是不同的,后面會多出一小段,特別是最后的“”字符串,就是小程序的特別的 UA,而在 系統設備中 UA 都是一致的微信小程序判斷字符串,小程序和內置瀏覽器 UA 是沒有區別的。
UA 檢測和判斷方法
1
2
3
4
//php版本
if( preg_match( '/MicroMessenger/', $_SERVER['HTTP_USER_AGENT'] ) ) {
echo '你真正使用微信訪問';
}
1
2
3
4
5
6
7
8
//js版本
if(/MicroMessenger/i.test(navigator.userAgent)){
alert('你真正使用微信訪問');
}
//或者
if(navigator.userAgent.match(/(MicroMessenger)/i)){
alert('你真正使用微信訪問');
}
以上子凡給出的兩種判斷方法默認都是直接使用正則表達式的方式判斷是否為微信,也就是不論安卓還是蘋果系統,是否小程序,都是通過 UA 中共有的“”字符串來作為判斷,只要判斷為微信設備訪問,代碼中//true 就可以改為自己想要執行的代碼。當然為了更準確的判斷還可以自己寫正則表達式匹配。
例如:
1
2
Android.*MicroMessenger.*miniProgram//安卓端的小程序
iPhone.*MicroMessenger//蘋果端微信或小程序
簡單總結
相信通過以上的舉例和這些 UA 可以幫助大家在微信開發 UA 方面有一丟丟小的了解,不知道大家有沒有仔細的觀察到, X 設備取得的 UA 和其它版本獲取到的 UA 有較多的不同,并且 x 的均為小寫,更多的細節子凡就不詳細說明了。
最后還是要感謝徒兒和朋友們幫忙,我才能收集到這些 UA,以至于可以整理成文簡單的分享,同時也必須要謝謝守望軒大叔提供開源的 微信小程序,這樣我才能有機會更快速的接入到淚雪博客。謝謝啦!