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で横幅を狭めた場合に処理されずに表示崩れなどの原因になってしまいます。
状況に応じて、適した方を使用するようにしましょう。

Post Snippetsを使ってWordPressでショートコードをの登録と管理をもっと楽に!!
ソースコードをハイライトする軽量ライブラリ「Highlight.js」の導入方法と使い方
Google Chromeでinput要素の補完機能を使うと背景に色がついてしまう問題
Visual Studio Codeでファイル差分の比較を行う方法
「EWWW Image Optimizer」を使ってWordPressをWebPに対応する方法
Webサイト制作の基礎の基礎、HTMLって何?
コーディング時にちゃんと意識したい複数語の連結方法一覧(キャメルケース・スネークケース・ケバブケース)
アイコンフォントをPCにインストールしている場合は、コーディング後の確認に注意
全角スペースを可視化してくれるVisual Studio Codeの拡張機能「zenkaku」
さくらのレンタルサーバで.htaccessが原因で500エラーになってしまう場合のチェックリスト
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
軽量で高速なターミナルエミュレーター「Ghostty」の設定方法
Eagleで実現するクリエイティブ素材の簡単管理
かゆいところに手が届く「Supercharge」でMac環境を便利にカスタマイズする
超軽量なコードエディタ 「Zed」をサブエディタとして活用する
Bartender 6で追加されたWidgets機能で自作メニューバーアイテムを簡単に作成する
Googleカレンダーを便利に活用するための小技集(祝日だけを表示・月末の繰り返しイベントを追加)
Obsidianを使った「自己流PKM」で行う知識トレーニング
テキストエディタ・ノートアプリ関連のショートカットキーをKeyboard Maestroで統一する
Path Finderを使ってキーボードだけでファイル操作する方法(応用編)