JavaScriptで特定のOSやブラウザの判定を行う方法

JavaScriptを使っていて、特定の端末やOSの場合になにか処理を実行したいときがあります。
今回はそんなときに使える判定方法についてまとめておきます。
ユーザーエージェントで判定
まずはユーザーエージェントで判定する方法です。
この方法だと特定のデバイスの場合に確実に発火しますが、その代わりにPCでブラウザ幅を狭めた場合などには発火してくれません。
OS判定
ユーザーエージェントはwindow.navigator.userAgentで取得ができる利用者の情報です。
ちなみに、大文字小文字があるとややこしいのでtoLowerCase()を使ってすべて小文字にするのが一般的です。
let ua = window.navigator.userAgent.toLowerCase();
if(ua.indexof("OS判定名") !== -1){
// 特定OSの場合の処理
}OS判定をするための判定名は下記の通りです。
| OS | 入力する判定名 | 備考 |
|---|---|---|
| macOS | mac os x | 半角スペースに注意 |
| Windows | windows nt | |
| iPhone | iphone | |
| Android | android |
ブラウザ判定
OS判定と全く同じ処理で、indexOfの中身をブラウザ用の名前に変えるだけで、ブラウザ判定は可能です。
let ua = window.navigator.userAgent.toLowerCase();
if(ua.indexof("ブラウザ判定名") !== -1){
// 特定ブラウザの場合の処理
}ブラウザ判定をするための判定名は下記の通りです。
| ブラウザ | 入力する判定名 |
|---|---|
| Google Chrome | chrome |
| Firefox | firefox |
| Safari | safari |
| Edge | edge |
| Internet Explorer | ie |
| Opera | opera |
デバイスの横幅で判定
もしPCでブラウザ幅を狭めても発火してほしい場合は、デバイス幅で判定するようにします。
ちなみに、下記コード内で使っているwindow.matchMediaを使うとメディアクエリと同じように条件が指定できます。
// デバイス幅が640px以下の場合に処理する
if (window.matchMedia('(max-device-width: 640px)').matches) {
// 640px以下の処理
} else {
// 641px以上の処理
}処理によってはOSに依存するよりも、横幅がどれだけの大きさかによって処理を分けたい場合もあるので、この方法だとOS関係なく発火できます。
使い分け方法
解析系や裏側の処理など、デバイス情報と紐付いて処理をする場合はユーザーエージェントから判定しないと、PCで横幅を狭めている場合にも発火してしまいます。
それに対して、表示系など見た目に関連する処理はデバイスの横幅から判定しないと、PCで横幅を狭めた場合に処理されずに表示崩れなどの原因になってしまいます。
状況に応じて、適した方を使用するようにしましょう。

様々な作業を自動化するgulpの基礎と導入方法
効率的なマークアップが出来るようになるEmmetでCSSを書く時の基本
WordPressのカスタム投稿タイプを追加後、ページは存在しているはずなのに404になる場合の解決方法
Visual Studio Codeで対応する括弧に色を付けて見やすくする環境設定
Dart Sassを使う上で1番基本的なネストやアンパサンドの書き方|Dart Sass入門
コーディング時に「アノテーションコメント」を使ってコードを見やすく管理する
Emmetで複数のタグを一括展開して、コーディングスピードをさらに上げる方法
CSSの読み込みで「its MIME type (‘text/html’) is not a supported stylesheet MIME type」エラーが表示されて読み込みができない場合の解決方法
JavaScriptのtest関数と正規表現でバリデーションチェックを行う
Backlogで2段階認証を設定後、SourceTreeでアカウントエラーが発生する場合の対処法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う
AlfredでNotion内の検索ができるようになるワークフロー「Notion Search」
Gitで1行しか変更していないはずのに全行変更した判定になってしまう
Macでアプリごとに音量を調節できるアプリ「Background Music」
Macのターミナルでパスワード付きのZIPファイルを作成する方法
MacBook Proでディスプレイのサイズ調整をして作業スペースを広げる
SteerMouseの「自動移動」機能で保存ダイアログが表示されたら自動でデフォルトボタンへカーソルを移動させる
iPhoneでタッチが一切効かなくなった場合に強制再起動する方法