公司要做一個APP下載頁面,里面需要判斷是安卓還是蘋果訪問本頁面,最開始想偷懶直接在給IOSAPP返回IOSAPP商店地址,然后Android直接進行訪問。但想着畢竟做兩個頁面不利於后期維護和修改,打算還是隨手寫一段js進行判斷。
js對客戶端的操作系統進行判斷主要通過navigator中的信息進行分析判斷。其中常用於判斷的有navigator.platform、navigator.userAgent這兩個。
platform(運行瀏覽器的操作系統平台)
在windows下顯示了Win32,在安卓設備下顯示Linuxi586,在mac中顯示了MacPPC,在iphone中顯示IOS...找出我們需要的平台的信息,通過indexOf進行判斷是否存在關鍵字,即可判斷。
UserAgent(由客戶機發送服務器的 user-agent 頭部的值)
UserAgent中一般會附帶部分操作系統特有的值,比如安卓設備中會有‘Android’、‘Adr’,IOS設備中會有'iPhone OS'等,通過這些特征即可進行判斷。
方法遠不止這兩種,還有通過navigator中的appVersion等其他屬性進行判斷亦可,但所有的判斷都做不到百分百准確,因為這些都是通過分析客戶端發送的信息進行判斷,但如果客戶通過修改客戶端進行偽造,亦是可以的。前段時間百度雲不允許在網站上下載大文件,必須要下載客戶端,很快就有網友發現了繞開的方法。其原理就是對於操作系統的判斷,百度雲網站中首先判斷該用戶使用的是否為windows操作系統,如果是則不允許下載超過一定大小的文件,而在linux中則可以,網友通過修改platform的信息簡單實現了破解,其中涉及的知識不深,但需要靈活運用,還是要對navigator熟悉才可。