我们平常在浏览器里辨认用户的接见装备都是经由过程 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/mobil…
我的代码都放在了 GitHub 上
https://github.com/joyqi/mobi…
此次思索给了我一些解决题目的启示,我们在思索解决方案的时刻从正面入手说不定会有新的发明。就比方我们的这个代码,现在还没法辨认统一代的 iPad Air 和 iPad mini,由于它们的 GPU 和分辨率均雷同,然则连续这个思绪实际上是有许多解决方案的,比方人人能够研讨下这两个装备的麦克风和喇叭个数,而这个数目也是能够经由过程 JS 猎取的 :P