デバイスがiOSかどうかを検出する 質問する

デバイスがiOSかどうかを検出する 質問する

Modernizr で機能を検出するのと同様に、ブラウザーが iOS 上で実行されているかどうかを検出できるかどうか疑問に思っています (ただし、これは明らかに機能検出ではなくデバイス検出です)。

通常、私は代わりに機能検出を好みますが、この質問に従ってビデオを処理する方法のため、デバイスがiOSかどうかを確認する必要があります。YouTube API が iPad / iPhone / 非 Flash デバイスで動作しない

ベストアンサー1

iOSの検出

iOS 13 iPadのユーザーエージェントとプラットフォーム文字列の両方が変更されましたそしてiPadとMacOSを区別することは可能だと思われるしたがって、以下のすべての回答ではそれを考慮する必要があります。

これは iOS 13 もカバーする最短の代替案かもしれません:

function iOS() {
  return [
    'iPad Simulator',
    'iPhone Simulator',
    'iPod Simulator',
    'iPad',
    'iPhone',
    'iPod'
  ].includes(navigator.platform)
  // iPad on iOS 13 detection
  || (navigator.userAgent.includes("Mac") && "ontouchend" in document)
}

iOSまたはtruefalse

より悪い選択肢: ユーザーエージェントスニッフィング

ユーザーエージェントのスニッフィングはさらに危険であり、問​​題が頻繁に発生します。

iPad iOS 13 では、ユーザー エージェントは MacOS 13 コンピューターのユーザー エージェントと同一ですが、iPad を無視すれば、しばらくはこれが機能する可能性があります。

var iOS = !window.MSStream && /iPad|iPhone|iPod/.test(navigator.userAgent); // fails on iPad iOS 13

IE11を誤って検出しないようにするに!window.MSStreamは、ここそしてここ

注:と は両方ともnavigator.userAgentnavigator.platformユーザーまたはブラウザ拡張機能によって偽造される可能性があります。

ユーザーエージェントまたはプラットフォームを変更するブラウザ拡張機能が存在するのは、Web サイトが過度に強力な検出を使用し、ユーザーのブラウザがその機能を使用できる場合でも一部の機能を無効にしてしまうことがよくあるためです。

ユーザーとのこの衝突を緩和するには、各ケースごとに Web サイトに必要な正確な機能を具体的に検出することをお勧めします。そうすれば、ユーザーが必要な機能を備えたブラウザーを入手したときに、追加のコード変更なしでその機能が動作するようになります。

iOSバージョンの検出

iOSのバージョンを確認する最も一般的な方法は、ユーザーエージェント文字列から解析するしかし、特徴 検出 推論もある *;

iOS4、iOS5 iOS6 、iOS7などでhistory API導入されたことは事実ですmatchMedia APIwebAudio APIWebSpeech API

注意:次のコードは信頼性が低く、これらの HTML5 機能のいずれかが新しい iOS バージョンで非推奨になった場合は機能しなくなります。警告しました。

function iOSversion() {

  if (iOS) { // <-- Use the one here above
    if (window.indexedDB) { return 'iOS 8 and up'; }
    if (window.SpeechSynthesisUtterance) { return 'iOS 7'; }
    if (window.webkitAudioContext) { return 'iOS 6'; }
    if (window.matchMedia) { return 'iOS 5'; }
    if (window.history && 'pushState' in window.history) { return 'iOS 4'; }
    return 'iOS 3 or earlier';
  }

  return 'Not an iOS device';
}

おすすめ記事