Различают 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;
}
Другие вопросы по тегам