Различают iPad и mac на iPad с iPadO
В iOS 13 яблоко изменило пользовательский агент, который использует iPad.
Вместо (например)
Mozilla / 5.0 (iPad; U; процессор iPhone OS 3_2, как Mac OS X; ru-ru) AppleWebKit/531.21.10 (KHTML, как Gecko) Версия /4.0.4 Mobile/7B314 Safari/531.21.10
стало (например)
Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit / 605.1.15 (KHTML, как Gecko) Версия /13.0 Safari/605.1.15
Мой вопрос: как мы можем различить iPad и Mac сейчас?
0 ответов
Условие, которое я использовал для обнаружения IpadOS:
ua.toLowerCase().indexOf('macintosh') > -1 && navigator.maxTouchPoints && navigator.maxTouchPoints > 2
К сожалению, сделать это только с помощью строки User-Agent больше не представляется возможным. Это небольшая проблема, если вы работаете на стороне сервера и вам нужно по-другому делиться загрузками, как вы упомянули в одном из своих комментариев.
Однако приведенное ниже должно надежно обнаруживать iPad на стороне клиента:
const iPad = !!(navigator.userAgent.match(/(iPad)/)
|| (navigator.platform === "MacIntel" && typeof navigator.standalone !== "undefined"))
Он избегает полагаться на события касания, которые будут происходить на Mac с мониторами с сенсорным экраном, и вместо этого использует navigator.standalone
это свойство только для iOS.
Объединение quangh в ответ и Майкла Запорожца ответ для обнаружения мобильных устройств, в том числе IPADS.
detectMobile() {
let isMobile = RegExp(/Android|webOS|iPhone|iPod|iPad/i)
.test(navigator.userAgent);
if (!isMobile) {
const isMac = RegExp(/Macintosh/i).test(navigator.userAgent);
if (isMac && navigator.maxTouchPoints && navigator.maxTouchPoints > 2) {
isMobile = true;
}
}
return isMobile;
}