ホームページ  >  記事  >  ウェブフロントエンド  >  携帯電話の機種を取得するJavaScriptの実装コード(携帯電話の機種とシステムを取得するJS)

携帯電話の機種を取得するJavaScriptの実装コード(携帯電話の機種とシステムを取得するJS)

亚连
亚连オリジナル
2018-05-31 10:33:436871ブラウズ

この記事では、モバイルデバイスモデルを取得するための JavaScript の実装コードを主に紹介します。必要な友人はそれを参照してください。

通常、ユーザーエージェントフィールドを通じてブラウザーでユーザーのアクセスデバイスを識別しますが、それを通じて私たちは一般的な情報のみを取得します。 Mac か Windows か、iPhone か iPad かなどを取得できます。使用している iPhone の世代を知りたい場合、この方法は機能しません。少し前に、たまたまモバイル クライアント (主に iOS デバイス) の特定のモデルを識別する必要があったので、その実装を考えました。この問題の。

まず、他の皆さんと同じように、私も UA を考えましたが、この道はうまくいかないことがわかりました。ブラウザの API を 1 つずついじるのにうんざりしていたとき、突然、記事内の特定のコードを思い出しました。この記事では、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 のモデルを識別することでデバイスのモデルを識別するという私の考えが理解できるはずです。

ただし、一部のデバイスは同じ世代、つまり、iPhone 6s、iPhone 6s Plus、iPhone SE など、GPU モデルがまったく同じです。これらはすべて Apple A9 GPU を使用していますが、それらを区別するにはどうすればよいですか?それらの最大の違いは解像度であることがわかります。 JavaScript を使用すると画面の解像度を簡単に取得できるため、2 つの方法を組み合わせることでデバイスの正確なモデルを取得できます。

ここに URL の例を示します。携帯電話からアクセスできます
https://joyqi.github.io/mobile-device-js/example.html

私のコードはすべて GitHub にあります
https://github .com/joyqi/mobile-device-js

この考えは、問題を解決するためのインスピレーションを与えてくれました。解決策を考えるとき、側面から新しい発見があるかもしれません。たとえば、現在のコードでは、GPU と解像度が同じであるため、同世代の iPad Air と iPad mini を識別できません。ただし、このアイデアを継続するための解決策は数​​多くあります。たとえば、これら 2 つのマイクの数を検討することができます。この番号は、JS:P

完全なテスト コード

<html>
  <head>
    <title>Mobile Device Example</title>
    <script src="./device.js"></script>
  </head>
  <head>
    <h1>GPU: <script>document.write(MobileDevice.getGlRenderer());</script></h1>
    <h1>Device Models: <script>document.write(MobileDevice.getModels().join(&#39; or &#39;));</script></h1>
  </head>
</html>

device.js

(function () {
  var canvas, gl, glRenderer, models,
    devices = {
      "Apple A7 GPU": {
        1136: ["iPhone 5", "iPhone 5s"],
        2048: ["iPad Air", "iPad Mini 2", "iPad Mini 3"]
      },

      "Apple A8 GPU": {
        1136: ["iPod touch (6th generation)"],
        1334: ["iPhone 6"],
        2001: ["iPhone 6 Plus"],
        2048: ["iPad Air 2", "iPad Mini 4"]
      },

      "Apple A9 GPU": {
        1136: ["iPhone SE"],
        1334: ["iPhone 6s"],
        2001: ["iPhone 6s Plus"],
        2224: ["iPad Pro (9.7-inch)"],
        2732: ["iPad Pro (12.9-inch)"]
      },

      "Apple A10 GPU": {
        1334: ["iPhone 7"],
        2001: ["iPhone 7 Plus"]
      }
    };

  function getCanvas() {
    if (canvas == null) {
      canvas = document.createElement(&#39;canvas&#39;);
    }

    return canvas;
  }

  function getGl() {
    if (gl == null) {
      gl = getCanvas().getContext(&#39;experimental-webgl&#39;);
    }

    return gl;
  }

  function getScreenWidth() {
    return Math.max(screen.width, screen.height) * (window.devicePixelRatio || 1);
  }

  function getGlRenderer() {
    if (glRenderer == null) {
      debugInfo = getGl().getExtension(&#39;WEBGL_debug_renderer_info&#39;);
      glRenderer = debugInfo == null ? &#39;unknown&#39; : getGl().getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
    }

    return glRenderer;
  }

  function getModels() {
    if (models == null) {
      var device = devices[getGlRenderer()];

      if (device == undefined) {
        models = [&#39;unknown&#39;];
      } else {
        models = device[getScreenWidth()];

        if (models == undefined) {
          models = [&#39;unknown&#39;];
        }
      }
    }

    return models;
  }

  if (window.MobileDevice == undefined) {
    window.MobileDevice = {};
  }

  window.MobileDevice.getGlRenderer = getGlRenderer;
  window.MobileDevice.getModels = getModels;
})();

JS を通じて電話のモデルとシステムを取得することもできます

js を通じて電話の基本的なパラメーターを取得したい場合は、navigator.userAgent を使用する必要があります。これにより、ブラウザーの基本的な情報を取得できます。ページ上の navigator.userAgent のコンテンツを確認したい場合は、 document.write(navigator.userAgent); を使用してそれをページに出力することで、特定のコンテンツをより明確に確認できます。

1. 以下は私が印刷したいくつかの携帯電話の userAgent コンテンツです:

1. iPhone6 plus
Mozilla/5.0 (iPhone; CPU iPhone OS a80cef128d8e145f6c8ee3fc2423b6bb10_2_123a0741707fd9beba74947ab53530089 Mac OS と同様 /span> 23b116612d380f011eb8a2f2f43b221dm1 Build/LMY47I) AppleWebKit/537.36 (KHTML と同様) Gecko) バージョン/4.0 Chrome/40.0.2214.127 Mobile Safari/ 537.36

3、Samsung
Mozilla/5.0 (Linux; a80cef128d8e145f6c8ee3fc2423b6bbAndroid 6.0.154bdf357c58b8a65c66d7c19c8e4d114; f9de5a5ee19407f7b743384e4b564dd6 SM-A800054bdf357c58b8a65c66d7c19c8e4d114 wv) AppleWebKit/537.36 (Gecko のような KHTML) バージョン/4.0 Chrome/55.0.2883.91 モバイル Safari/537.36

4 、Xiaomi
Mozilla/5.0 (Linux; a80cef128d8e145f6c8ee3fc2423b6bbAndroid 6.0.154bdf357c58b8a65c66d7c19c8e4d114; 23b116612d380f011eb8a2f2f43b221dRedmi Note 4X494c0df226525cc046cf4930a65bbd6f Build/MMB29M; wv) AppleWebKit/537.36 (KHTML、Gecko など) バージョン/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36

上記から、iPhone フィールドとシステムが含まれていることがわかります。バージョンフィールドは上で赤色でマークされています。 2、3、4 は、いくつかの Android 携帯電話の userAgent の内容です。注意深く観察すると、Android 5.1 などがシステム バージョンであることがわかります。青いのは携帯電話のモデルです。ブラウザ版などその他のコンテンツについては、ここでは説明を省略します。この userAgent コンテンツの具体的な意味とソースを知りたい場合は、次のアドレスで詳しい説明を参照してください:

なぜすべてのブラウザの userAgents には Mozilla が付属しているのですか

2、在网上查了下有木有现成的js能直接实现此功能,找到了一个mobile-detect.js。基本可以实现我们需要的参数,下载地址:

https://github.com/hgoebl/mobile-detect.js/

文档地址:

http://hgoebl.github.io/mobile-detect.js/doc/MobileDetect.html

使用方法:

var md = new MobileDetect( 
  &#39;Mozilla/5.0 (Linux; U; Android 4.0.3; en-in; SonyEricssonMT11i&#39; + 
  &#39; Build/4.1.A.0.562) AppleWebKit/534.30 (KHTML, like Gecko)&#39; + 
  &#39; Version/4.0 Mobile Safari/534.30&#39;); 
 
// more typically we would instantiate with &#39;window.navigator.userAgent&#39; 
// as user-agent; this string literal is only for better understanding 
 
console.log( md.mobile() );     // &#39;Sony&#39; 
console.log( md.phone() );      // &#39;Sony&#39; 
console.log( md.tablet() );     // null 
console.log( md.userAgent() );    // &#39;Safari&#39; 
console.log( md.os() );       // &#39;AndroidOS&#39; 
console.log( md.is(&#39;iPhone&#39;) );   // false 
console.log( md.is(&#39;bot&#39;) );     // false 
console.log( md.version(&#39;Webkit&#39;) );     // 534.3 
console.log( md.versionStr(&#39;Build&#39;) );    // &#39;4.1.A.0.562&#39; 
console.log( md.match(&#39;playstation|xbox&#39;) ); // false

使用过程中ios没有什么问题,想获取的都可以获取到,不过Android并不是都能获取到。所以又对Android的做了单独处理。发现Android手机型号后面都带了一段Build/...。所以就以此做了下单独处理,来获取Android手机型号。下面是具体代码:

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<meta name="viewport" 
  content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no"> 
<title>JS获取手机型号和系统</title> 
</head> 
<body> 
</body> 
<script src="js/lib/jquery-1.11.1.min.js"></script> 
<script src="js/lib/mobile-detect.min.js"></script> 
<script> 
  //判断数组中是否包含某字符串 
  Array.prototype.contains = function(needle) { 
    for (i in this) { 
      if (this[i].indexOf(needle) > 0) 
        return i; 
    } 
    return -1; 
  } 
 
  var device_type = navigator.userAgent;//获取userAgent信息 
  document.write(device_type);//打印到页面 
  var md = new MobileDetect(device_type);//初始化mobile-detect 
  var os = md.os();//获取系统 
  var model = ""; 
  if (os == "iOS") {//ios系统的处理 
    os = md.os() + md.version("iPhone"); 
    model = md.mobile(); 
  } else if (os == "AndroidOS") {//Android系统的处理 
    os = md.os() + md.version("Android"); 
    var sss = device_type.split(";"); 
    var i = sss.contains("Build/"); 
    if (i > -1) { 
      model = sss[i].substring(0, sss[i].indexOf("Build/")); 
    } 
  } 
  alert(os + "---" + model);//打印系统版本和手机型号 
</script> 
</html>

得到结果:

iphone iOS10.21---iPhone

android AndroidOS6.01---Redmi Note 4X

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

JavaScript实现区块链

iview table render集成switch开关的实例

解决Vue.js 2.0 有时双向绑定img src属性失败的问题

以上が携帯電話の機種を取得するJavaScriptの実装コード(携帯電話の機種とシステムを取得するJS)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。