こんにちは、フロントエンドエンジニアのまさにょんです。
今回は、JavaScriptでスマホ判定をする2つの方法(userAgentと画面幅でスマホ判定する方法)について解説します。
目次
JavaScriptでスマホ判定をする
JavaScriptでスマホ判定をするには、「 navigator.userAgent 」による判定と「画面幅」による判定のどちらかを使います。
それぞれ解説していきます。
接続してきたユーザーのデバイス情報を知るには「navigator オブジェクト」が使えます。
「navigator オブジェクト」には、いくつもの「ユーザー端末」(ユーザー・デバイス)の情報が格納されていて、プロパティとして、各情報を取得できます。
なかでも、スマホ判定に使えるプロパティとして、userAgent と言うものがあります。
デバイスによって、userAgentに格納されている情報は違います。
ただ、スマホの場合、Mobile と iPhone または Android の記述があるので、その情報を正規表現でCheckすることで、スマホ判定ができます。
Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/577.01 (KHTML, like Gecko)
Version/6.8 Mobile/11A111 Safari/9788.91
// 1. navigatorオブジェクトのuserAgentプロパティで、デバイス情報を取得することができる。
let userDevice = navigator.userAgent;
console.log({navigator});
console.log({userDevice});
// 2. navigator.userAgent からスマホ判定する関数
function JudgingFromUserAgent() {
// 3. UserAgentからのスマホ判定 => navigator.userAgent.match(正規表現)
if (navigator.userAgent.match(/iPhone|Android.+Mobile/)) {
console.log('スマホです!');
} else {
console.log('スマホ以外のデバイスです!');
}
}
JudgingFromUserAgent();
// スマホです!
// 1. スマホ・タブレット・PCの判断をする条件分岐のSample
if(userDevice.indexOf('iPhone') > 0 || userDevice.indexOf('iPod') > 0 || userDevice.indexOf('Android') > 0 && userDevice.indexOf('Mobile') > 0){
console.log('SmartPhon');
}else if(userDevice.indexOf('iPad') > 0 || userDevice.indexOf('Android') > 0){
console.log('Tablet');
}else{
console.log('PC');
}
画面幅から、スマホサイズとして判定するパターン
画面幅から、スマホサイズとして判定するパターンでは、ブラウザをUserが縮小した場合でも判定できるので、柔軟な対応が可能です。
window.matchMedia() を使うことで、JavaScriptでデバイスの画面幅を判定できます。
なので、画面幅によってUIを変更したいときに使えます。
また、この方法の注意点としては、スマホサイズの境界を決め打ちする必要がある点です。
スマホも大型から小型のサイズまでさまざまな種類があるので、スマホサイズの基準点の設定には、注意が必要です。
// 1. 画面幅から、スマホサイズとして判定するパターン => スマホサイズの境界を決め打ちする
function JudgingFromScreenWidth() {
// 2. window.matchMedia()関数を使うことで、デバイス画面幅を判定できる!
if (window.matchMedia && window.matchMedia('(max-device-width: 640px)').matches) {
console.log('画面幅から考えて、スマホです!');
} else {
console.log('画面幅から考えて、スマホ以外のデバイスです!');
}
}
JudgingFromScreenWidth();
// 画面幅から考えて、スマホ以外のデバイスです!
先述のとおり、JavaScriptで画面幅を判定して、UIを変更したいときにも使えます。
次のSampleは、スマホ or PC・タブレットで、画面に表示するTitelを変更しています。
<span id="members-only-title">Members Only Page</span>
<script type="text/javascript">
const membersOnlyTitle = document.getElementById('members-only-title');
if (window.matchMedia && window.matchMedia('(max-device-width: 767px)').matches) {
// 1. スマホ端末でのTitel表示
membersOnlyTitle.innerHTML = `<h2>Robotama Members Page</h2>`;
} else {
// 2. PC・タブレット端末でのTitelサイズ
membersOnlyTitle.innerHTML = `<h1>Gunmar Members Page</h1>`;
}
</script>
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!
参考・引用
- JavaScriptでスマホ判定する2つの方法
- 【JavaScript】スマホ判定する方法
- JavaScriptでアクセス元の端末がスマホかどうか判定する方法を現役エンジニアが解説【初心者向け】
- MDN: window.matchMedia