出版日: 2024年1月9日
このようなウェブサイト(danyelkoca.com)を運営する場合、訪問者のインサイトを得ることは非常に重要です。
測定しないものを改善することはできません。
ピーター・ドラッカー
ユーザーに関する重要な情報の1つは、彼らがサイトを訪れているときに使用しているデバイスとブラウザです。
なぜなら、この情報は次のような行動によってサイトを改善するのに役立つからです:
それでは、コードの詳細を見てみましょう!
デバイスを特定するために、JavaScriptでwindow.navigator.userAgent
関数を使用します。
この関数は以下のように文字列を返します:
console.log(window.navigator.userAgent);
// >> Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
結果は私のコンピュータで見えるものであり、これはChromeブラウザを使用したMacBook Proです。
出力を分析してみましょう:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/120.0.0.0 Safari/537.36
この関数がデバイスだけでなく、以下のような他の情報も返すことがわかります:
Mozilla/5.0, AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
今のところ、デバイスを示す出力の部分に焦点を当ててみましょう:
Macintosh; Intel Mac OS X 10_15_7
この関数を使用してデバイスを特定する場合、デバイスのモデルやデバイスで実行されているOSなど、情報が誤解を招く可能性があるため、デバイスを推測するだけで十分です。
userAgent文字列を使用して、このStackOverflowの回答に基づいて、ユーザーのデバイスをモバイルまたはデスクトップに分類するための正規表現を書くことができます。
let userAgentString = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
function deviceDetection(userAgentString) {
let device = 'デスクトップ';
if (
/(android|bbd+|meego).+mobile|avantgo|bada/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)/|plucker|pocket|psp|series(4|6)0|symbian|treo|up.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
userAgentString
)
) {
device = 'モバイル';
}
return device;
}
console.log(browserDetection(userAgentString));
// >> デスクトップ
次に、ブラウザを示す出力の部分に焦点を当ててみましょう:
Mozilla/5.0, AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
userAgentを介したブラウザの検出は非常に複雑であり、この出力自体に3つのブラウザが含まれています:
MDN Web Docsによると、UserAgent文字列を使用してブラウザについて推測するために以下の表が使用される可能性があります:
エンジン | 含まれている必要があるもの | 含まれていない必要があるもの |
---|---|---|
Firefox | Firefox/xyz | Seamonkey/xyz |
Seamonkey | Seamonkey/xyz | |
Chrome | Chrome/xyz | Chromium/xyz またはEdg.*\/xyz |
Chromium | Chromium/xyz | |
Safari | Safari/xyz | Chromium/xyz またはEdg.*\/xyz |
Opera 15+(Blinkベースのエンジン) | OPR/xyz | |
Opera 15+(Prestoベースのエンジン) | Opera/xyz |
したがって、MDNの条件に基づいてブラウザを定義するための正規表現を書いてみましょう。
let userAgentString = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
function browserDetection(userAgentString) {
let browser = 'unknown';
if (/Firefox/.*/.test(userAgentString) && !/Seamonkey/.*/.test(userAgentString))
browser = 'Firefox';
else if (/Seamonkey/.*/.test(userAgentString)) browser = 'Seamonkey';
else if (
/Chrome/.*/.test(userAgentString) &&
!/Chromium/.*/.test(userAgentString) &&
!/Edg.*/.*/.test(userAgentString)
)
browser = 'Chrome';
else if (/Chromium/.*/.test(userAgentString)) browser = 'Chromium';
else if (
/Safari/.*/.test(userAgentString) &&
!/Chromium/.*/.test(userAgentString) &&
!/Edg.*/.*/.test(userAgentString)
)
browser = 'Safari';
else if (/OPR/.*/.test(userAgentString)) browser = 'Opera 15+ (Blink-based engine)';
else if (/Opera/.*/.test(userAgentString)) browser = 'Opera 15+ (Presto-based engine)';
return browser;
}
console.log(browserDetection(userAgentString));
// >> Chrome
私たちは、私のブラウザを正しく分類し、実際にChromeであることがわかりました。しかし、注意深い人々は、私のuserAgent文字列がSafariの条件も満たしていることに気付くでしょう。Chromeの条件がSafariよりも先にテストされるため、ブラウザはChromeと分類されますが、ChromeをSafariよりも先にテストすることが常に期待される結果をもたらすかどうかについては、さらなるテストが必要です。
上記の2つの関数、deviceDetection
、browserDetection
を使用することで、ユーザーのデバイスとブラウザを正常に分類できます。注意すべき点として、window.navigator.userAgent
はすべてのモダンブラウザと
互換性がありますので、安全に使用できます。ご質問がある場合は、以下のコメントセクションでお知らせください。
Happy hacking!
このブログは英語からChatGPTによって翻訳されました。不明な点がある場合は、お問い合わせページからご連絡ください。
コメントを残す
コメント
その他のブログ
2024/06/19
SvelteとJavaScriptを使用してシンプルで動的なツールチップを作成する
2024/06/17
JavaScriptを用いて東京都のインタラクティブな地図を作成する
2024/06/14
Matplotlibで日本語文字化けを解決できる簡単な方法
2024/06/13
書評 | トーキング・トゥ・ストレンジャーズ 「よく知らない人」について私たちが知っておくべきこと by マルコム・グラッドウェル
2024/06/07
日本語で最もよく使われる3000字の漢字
2024/06/07
VSCodeでRegexを使用してReplaceする方法
2024/06/06
SvelteではReadable Storeを使用するな
2024/06/05
GzipとPakoでデータを圧縮してWebサイトのローディング速度を上げる方法
2024/05/31
JavaScriptを使用してWebページ上でマウスが指している単語を特定する
2024/05/29
SvelteとSVGを用いてインタラクティブな地図を作成する
2024/05/28
書評 | Originals 誰もが「人と違うこと」ができる時代 by アダム・グラント & シェリル・サンドバーグ
2024/05/27
Javascriptを使用して数独を解く方法
2024/05/26
ウェブサイトへのトラフィックを1か月で10倍に増やした方法
2024/05/24
人生はサイクリングに似ている
2024/05/19
JavaScriptでバックトラッキング・アルゴリズムを用いて完全な数独グリッドを生成する
2024/05/16
Tailwindが素晴らしい理由とWeb開発をいかに楽にするか
2024/05/15
PythonとGitフックを使用してサイトマップを自動的に生成する
2024/05/14
書評 | Range (レンジ) 知識の「幅」が最強の武器になる by デイビッド・エプスタイン
2024/05/13
SvelteとSvelteKitはなんですか?
2024/05/12
SvelteKitで国際化(多言語化)
2024/05/11
SvelteでCachingを用いてDeploy時間を短縮する方法
2024/05/10
SvelteとIntersection Oberverによるレイジーローディング
2024/05/10
遺伝的アルゴリズムで最適な株式ポートフォリオを作る方法
2024/05/09
Pythonを用いてShapeFileをSVGに変換できる方法
2024/05/08
Svelteの反応性:変数、バインディング、およびキー関数
2024/05/07
書評 | 孫子の兵法
2024/05/06
スペシャリストは終了。ゼネラリスト万歳!
2024/05/03
トルコ人の有権者の投票行動をPythonでの分析
2024/05/01
Seleniumを用いてトルコ投票データベースを作る方法
2024/04/30
SvelteとTailwindを使用してInfinite Scrollできる方法
2024/04/29
1年間以内で日本語を駆使できるようになるための方法
2024/04/25
SvelteとTailwindを用いたWebサイトテンプレート
2024/01/29
怠惰なエンジニアとひどいデザイン
2024/01/28
偉大さについて
2024/01/28
MacBook で PDF を PNG に変換する
2023/12/31
2023年振り返り:24冊の読んだ本のまとめ
2023/12/30
Python PILを使用して写真コラージュを作成する方法
2024/01/19
ChatGPT回答の解析