[解決済み] デバイスがiOSであるかどうかを検出する
質問
Modernizr の機能検出と同様に、iOS でブラウザが動作しているかどうかを検出することは可能でしょうか(これは明らかに機能検出ではなくデバイス検出ですが)?
通常、私は機能検出を支持しますが、次の質問のように、動画の処理方法のためにデバイスがiOSであるかどうかを調べる必要があります。 iPad / iPhone / 非FlashデバイスでYouTube APIが動作しない
解決するには?
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
はどちらかになります。
true
または
false
もっと悪い選択肢 ユーザーエージェントのスニッフィング
ユーザーエージェントのスニッフィングは、より危険であり、問題が頻繁に発生します。
iPad iOS 13では、ユーザーエージェントがMacOS 13のコンピュータのものと同一になる しかし、iPadを無視すれば、しばらくはまだ使えるかもしれません。
var iOS = !window.MSStream && /iPad|iPhone|iPod/.test(navigator.userAgent); // fails on iPad iOS 13
は
!window.MSStream
はIE11を不正に検出しないためのものです。
ここで
と
こちら
.
注
どちらも
navigator.userAgent
と
navigator.platform
は、ユーザーやブラウザの拡張機能によって偽造される可能性があります。
userAgentやプラットフォームを変更するブラウザ拡張機能が存在するのは、Webサイトがあまりにも強引な検出を行うため、ユーザーのブラウザがその機能を使用できる場合でも、一部の機能を無効にしてしまうことが多いからです。
このユーザーとの衝突を緩和するために、ウェブサイトが必要とする機能をケースごとに具体的に検出することをお勧めします。そうすれば、ユーザーが必要な機能を備えたブラウザを手に入れたとき、追加のコードを変更することなく、すでに動作するようになります。
iOSのバージョンを検出する
iOSのバージョンを検出する最も一般的な方法は、以下の通りです。 ユーザーエージェントの文字列からパースする . しかし 特徴 <ストライク 検出 * ;
私たちは、以下の事実を知っています。
history API
に導入されました。
iOS4
-
matchMedia API
で
iOS5
-
webAudio API
で
iOS6
-
WebSpeech API
で
iOS7
といった具合です。
注 以下のコードは信頼性が低く、これらの 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';
}
関連
-
[解決済み】JavaScriptで':'(コロン)は何をするのか?
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み] 要素外でのクリックを検出するにはどうすればよいですか?
-
[解決済み] モバイル端末の検出にはどのような方法がありますか?
-
[解決済み] iOSまたはmacOSで、インターネット接続が有効かどうかを確認するにはどうすればよいですか?
-
[解決済み] iOSのステータスバーの文字色を変更する方法
-
[解決済み] Safari、Chrome、IE、Firefox、Operaのブラウザを検出する方法は?
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] ブラウザのウィンドウが現在アクティブでないことを検出する方法はありますか?
-
[解決済み】iOSアプリの名前を変更する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】ETIMEDOUTエラーの対処方法は?
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない
-
[解決済み】iOS/Androidオペレーティングシステムの検出について
-
[解決済み] iOS端末のみを対象としたCSSメディアクエリ【重複】について
-
[解決済み] AngularJSを使ったASP.NET Web APIメソッドからのファイルダウンロード