思路清奇:通過 JavaScript 獲取移動設備的型號
我們一般在瀏覽器里識別用戶的訪問設備都是通過 User Agent
這個字段來獲取的,但是通過它我們只能獲取一個大概的信息,比如你用的是 Mac 還是 Windows,用的是 iPhone 還是 iPad。如果我想知道你用的是第幾代 iPhone,這個方法就不行了,前段時間我正好有這個需求,識別移動客戶端的具體型號(主要是 iOS 設備),于是思考了下這個問題的實現。
首先,我跟大家一樣想到了 UA,不過事實證明這路走不通。就在我無聊一個一個擺弄瀏覽器的 API 時,突然一篇文章里的某段代碼提醒了了我。這篇文章講的是怎樣通過 js 獲取圖形設備信息的,因為 HTML5 支持了 canvas,所以可以通過 API 獲取圖形設備的型號,比如顯卡的型號。
(function () { var canvas = document.createElement('canvas'), gl = canvas.getContext('experimental-webgl'), debugInfo = gl.getExtension('WEBGL_debug_renderer_info'); console.log(gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL));})();
運行這段代碼就可以獲取顯卡的型號了,如果你在iOS的設備里運行,會獲取到諸如 Apple A9 GPU
之類的信息。而我們知道每一代 iOS 設備的 GPU 型號都是不同的,比如 iPhone 6 是 A8,而 iPhone 6s 就是 A9。看到這里,你應該大概知道我的思路了,就是通過識別 GPU 的型號來辨別設備的型號。
不過這還有個小瑕疵,有些設備是同一代,也就是 GPU 型號完全相同,比如 iPhone 6s, iPhone 6s Plus, iPhone SE。它們用的都是 Apple A9 GPU
,怎么區分開它們呢?你會發現它們最大的不同不就是分辨率不同嗎?而通過 JavaScript 我們又可以方便地獲取屏幕分辨率,這樣把兩個手段綜合應用一下就可以獲取設備的準確型號了。
這里有個示例網址,大家可以用手機訪問
https://joyqi.github.io/mobile-device-js/example.html
我的代碼都放在了 GitHub 上
https://github.com/joyqi/mobile-device-js
這次思考給了我一些解決問題的啟發,我們在思考解決方案的時候從側面入手說不定會有新的發現。就比如我們的這個代碼,目前還無法識別同一代的 iPad Air 和 iPad mini,因為它們的 GPU 和分辨率均相同,但是延續這個思路其實是有很多解決方案的,比如大家可以研究下這兩個設備的話筒和喇叭個數,而這個數量也是可以通過 JS 獲取的 :P
FT12短網址也是通過這個方法,判斷用戶的設備,然后根據不同的設備展示不同的短網址頁面,從而提高用戶體驗度
掃描二維碼推送至手機訪問。
版權聲明:本文由短鏈接發布,如需轉載請注明出處。
本文鏈接:http://www.virginiabusinesslawupdate.com/article_287.html