iOS13のSafariで「デスクトップ用Webサイトを表示」がOnになっている場合にUserAgentでiOSかどうか識別する

iOS13ではSafariの設定「デスクトップ用Webサイトを表示」がOnになっている場合、UserAgentがmacOS10.15と同じ値に変化する。

*この設定はiOSではデフォルトでOff、iPadOSではデフォルトでOnになっている。

「デスクトップ用Webサイトを表示」がOffの場合のUserAgent

iPadOSの場合。"iPad"が入っている。

plugins : "[object PluginArray]"
mimeTypes : "[object MimeTypeArray]"
cookieEnabled : "true"
standalone : "false"
geolocation : "[object Geolocation]"
mediaCapabilities : "[object MediaCapabilities]"
webdriver : "false"
maxTouchPoints : "5"
appCodeName : "Mozilla"
appName : "Netscape"
appVersion : "5.0 (iPad; CPU OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1"
platform : "iPad"
product : "Gecko"
productSub : "20030107"
userAgent : "Mozilla/5.0 (iPad; CPU OS 13_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Mobile/15E148 Safari/604.1"
vendor : "Apple Computer, Inc."
vendorSub : ""
language : "en-US"
languages : "en-US"
onLine : "true"

「デスクトップ用Webサイトを表示」がOnの場合のUserAgent

iPadOSの場合。macOSと区別がつかなくなる。

plugins : "[object PluginArray]"
mimeTypes : "[object MimeTypeArray]"
cookieEnabled : "true"
standalone : "false"
geolocation : "[object Geolocation]"
mediaCapabilities : "[object MediaCapabilities]"
webdriver : "false"
maxTouchPoints : "5"
appCodeName : "Mozilla"
appName : "Netscape"
appVersion : "5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15"
platform : "MacIntel"
product : "Gecko"
productSub : "20030107"
userAgent : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15"
vendor : "Apple Computer, Inc."
vendorSub : ""
language : "en-US"
languages : "en-US"
onLine : "true"

実際のmacOS 10.15のUserAgent

plugins : "[object PluginArray]"
mimeTypes : "[object MimeTypeArray]"
cookieEnabled : "true"
geolocation : "[object Geolocation]"
mediaCapabilities : "[object MediaCapabilities]"
webdriver : "false"
maxTouchPoints : "0"
appCodeName : "Mozilla"
appName : "Netscape"
appVersion : "5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15"
platform : "MacIntel"
product : "Gecko"
productSub : "20030107"
userAgent : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15"
vendor : "Apple Computer, Inc."
vendorSub : ""
language : "ja-JP"
languages : "ja-JP"
onLine : "true"

「デスクトップ用Webサイトを表示」がOnになっている場合の識別方法

iOS, iPadOSの場合はmaxTouchPointsが0より大きい数値になっているので、これを利用する。

//  macOS
if (navigator.platform.indexOf('Mac') != -1) {
  //  iOS13以上で"デスクトップ用Webサイトを表示"がOnの場合
  if(navigator.maxTouchPoints != undefined && navigator.maxTouchPoints > 0) {
    return "iOS";
  }
  return "Mac";
}

*Safari以外のブラウザではmaxTouchPointが存在しない場合があるので注意。

*現状ではmacOSにはタッチパネルの製品は無いので、OSがmacでmaxTouchPointが0より大きい場合、macOSである可能性は無い。

*WKWebViewはこの設定の影響を受けないので、WKWebView内で取得するUserAgentは変化しない。

*ChromeなどのSafari以外のブラウザはWKWebViewを使用しているため、UserAgentは変化しない。