この記事で解決できる悩み

こんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴9年)で、資格は13個保有しています。
「ユーザーエージェントでSafariの判定を行う方法が知りたい」とお考えではありませんか?
結論、ユーザーエージェントでSafariの判定を行うのは超簡単です。



ただ、WebViewも考慮するとややこしくなるので地味に大変でした…
ということで、本記事ではユーザーエージェントでSafariの判定を行う方法を解説します。





すぐ読み終わるので、ぜひ最後まで読んでくださいませ。
目次
ユーザーエージェントでSafariの判定を行う方法
早速ですが、ユーザーエージェントでSafariの判定を行う方法を解説します。



今回はTypeScriptで解説しますね。
/**
* Safariかどうか
*
* @return Safariかどうか
*/
isSafari(): boolean {
const ua = navigator.userAgent.toLowerCase();
const isSafari =
ua.includes('safari') &&
// Chrome、iOS版Chrome、iOS版FirefoxはSafariという文字列を含むので除外する
!ua.includes('chrome') &&
!ua.includes('crios') &&
!ua.includes('fxios');
// WebViewの場合はSafariという文字列を含まないため個別に確認が必要
const isIosWebView = (ua.includes('iphone') || ua.includes('ipad')) && ua.includes('applewebkit') && !ua.includes('safari');
return isSafari || isIosWebView;
}
上記のコードでSafariの判定が可能です。



通常はユーザーエージェントに「safari」という文字列が含まれます。
ただ、Chrome等も「safari」という文字列を含むのと、WebViewの場合は「safari」という文字列がないので別途確認が必要です。
まとめ
今回は、ユーザーエージェントでSafariの判定を行う方法について解説しました。
以下が本記事のまとめになります。



最後までお読みいただき、ありがとうございました!
- クソおすすめ本



海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。