1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Javascriptで端末判定

Last updated at Posted at 2021-03-06

結論

<script type="text/javascript"><!--
function getPlatform() {
    // IE か
    var isIe = (String.prototype.hasOwnProperty('startsWith') === false);
    // Winか否か
    var isWinPc = navigator.platform.startsWith('Win') || isIe;
    // Androidか否か
    var isAndroid = navigator.userAgent.indexOf('Android') > 0;
    // Macか否か
    var isApple = navigator.platform.startsWith('Mac') || navigator.platform.startsWith('iPhone') || navigator.platform.startsWith('iPad');
    // AppleMobileか否か
    var isAppleMoblile = isApple && (typeof navigator.standalone !== 'undefind' && navigator.standalone === false);
    // AppleDesctopか否か
    var isAppleDesctop = isApple && !isAppleMoblile;
    if (isWinPc) {
        return 'win';
    }
    if (isAndroid) {
        return 'android';
    }
    if (isAppleMoblile) {
        return 'apple_mobile';
    }
    if (isAppleDesctop) {
        return 'mac';
    }
    return false;
}
--></script>

参考: navigator
https://developer.mozilla.org/ja/docs/Web/API/Window/navigator

参考: navigator.standalone
https://developer.mozilla.org/ja/docs/Web/API/Navigator

論理コード

VAR IEである = 'String' に'startWith'がない。

VAR Windowsである = 'navigator.platform' が 'Win' で始まる

VAR Androidである = 'navigator.userAgent' に 'Android' がある。

VAR Appleの端末である = 
    ('navigator.platform' が 'Mac' で始まる) または 
    ('navigator.platform' が 'iPhone' で始まる) または
    ('navigator.platform' が 'iPad' で始まる)

VAR Appleのモバイル端末である = 
    ('navigator.standalone' が 'undefind' ではない) かつ
    ('navigator.standalone' が 'false' である)
 
VAR Appleのデスクトップ端末である = 
    (Appleの端末である)かつ
    (Appleのモバイル端末である の否定)

解説1VAR IEである = 'String' に'startWith'がない。

IEのみ startWith をサポートしていないので利用する。
参考:
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith

解説2 VAR Windowsである = 'navigator.platform' が 'Win' で始まる

Windowの場合は簡単で、navigator.platform の返り値に Win が含まれている。
これを利用しない手はない。

解説3VAR Androidである = 'navigator.userAgent' に 'Android' がある。

今回、Androidのみ、UserAgentを利用している。理由は2つ。

1: navigator.platform の返り値が カーネルになっているため。
2: 他にスマートな方法が思いつかなかった。

の2点。
...UserAgentが廃止になったらどうすべきか。

解説4 アップル端末について判定

Appleの端末だけ段階的に判定を行います。理由は2つ。

1: navigator.platform の返り値が端末の種類やブラウザ設定によって切り替わるため
2: navigator.userAgentが端末のバージョンごとに違うため(またはデスクトップとモバイルで同じになるため)

  • ステップ1

  • navigator.platform で Mac iPhone iPad を網羅してApppleの端末であることを切り分ける

  • ※ iPhone、iPadでも 返り値が Macになることがあるためこれだけでは判定できない。

  • ステップ2

  • navigator.standaloneでiOSサファリであることを確認する。

  • このプロパティはMDSによるとiOSサファリにしか実装されておらず、

  • 端末がスタンドアロンで起動している場合は TRUE を返すそう。

  • 画面分割は試してない。けどしらん!

  • ステップ3

  • ステップ1とステップ2を基に Mac か iOS かを判定する。

以上。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?