7
7

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でアクセス元のiOSかAndroidかを判定する

Last updated at Posted at 2020-09-07

はじめに

本関数の内容

  • ES2015のアロー関数を使用
  • ブラウザでWebページを表示時にアクセス元のOSをユーザエージェントを元に判定する
  • 正規表現を使ったiOS, Android, その他のOSを反映

各OSのユーザエージェントはこちらを参考にした

iPadは13よりiOSではなくiPadOSになり、PC向けのWebサイトを表示する設定をしている場合はUserAgentにiPadと入ってくれないので、トリッキーな判定をする必要がある

ref: https://stackoverflow.com/a/57924983/4480860

iOSかAndroidかを判定する関数

Androidの場合に表示するURLスキーム

const getMobileOS = () => {
  const ua = navigator.userAgent
  if (/android/i.test(ua)) {
    return "Android"
  }
  else if (/iPad|iPhone|iPod/.test(ua))
     || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1){
    return "iOS"
  }

  return "Other"
}

使い方

この関数の例はAndroidとiOSで開いている場合にそれぞれストアのアプリのサイトを開いたり、アプリを直接起動するurl schemaを出し分けるのに使う。

const os = getMobileOS()
# console.log(os) => 'Android'
# console.log(os) => 'iOS'
# console.log(os) => 'Other'

補足 正規表現の説明

説明した関数の中で使用している/android/i.test(ua)を例に説明

  • /android/ が正規表現の本体
  • /android/i のiは正規表現のフラグで大文字小文字を判定しない
    • AndroidやANDROID,aNdRoIdに対応することになる
    • /android/iでは検証する文字列のどこかに大文字小文字を気にしないでandroidを含む文字列があるかどうかを判定する
  • /android/i.test(ua) のtestメソッドは引数の文字列uaに含まれる文字列が/android/iの正規表現にヒットするかどうかをtrue/falseで返す
7
7
3

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
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?