如何使用javascript将iPad Pro检测为iPad?

Won*_*nka 19 javascript ios ios13 ipados

我们能够使用 javascript 检测 iPad 设备,如下所示:

function isDeviceiPad(){
    return navigator.platform.match(/iPad/i);
}
Run Code Online (Sandbox Code Playgroud)

这在检测 iPad 设备时效果很好,但是当我们从 中检查时iPad Pro (10.5 inch),它没有检测到它是 iPad。

为了进一步调查,我们深入研究了navigator对象,检查了platformuserAgent,并得到了以下结果:

navigator.platform = 'MacIntel';
navigator.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)';
Run Code Online (Sandbox Code Playgroud)

问题是navigator.platform = 'MacIntel'(与 MacBook Pro 相同)返回而不是iPad. 我们需要一种方法来检测这是 iPad 而不是 MacBook Pro,但导航器似乎iPad不像旧 iPad那样返回。

知道我们如何解决这个问题吗?

Ste*_*gin 25

iPadPro 将 navigator.platform 报告为“MacIntel”,但这与其他平台相同。

目前(2019 年)iPadPro 与其他平台的区别在于 iPadPro 支持触控。

这里有一些有用的方法。

function isIOS() {
  if (/iPad|iPhone|iPod/.test(navigator.platform)) {
    return true;
  } else {
    return navigator.maxTouchPoints &&
      navigator.maxTouchPoints > 2 &&
      /MacIntel/.test(navigator.platform);
  }
}

function isIpadOS() {
  return navigator.maxTouchPoints &&
    navigator.maxTouchPoints > 2 &&
    /MacIntel/.test(navigator.platform);
}

Run Code Online (Sandbox Code Playgroud)

  • navigator.platform 现已弃用 (5认同)

Eug*_*kov 21

我猜 iPad Pro 升级到 iPadOS 13 Beta。由于 Apple 声称在 iPadOS 上使用 Safari进行桌面级浏览,因此移动 Safari 似乎也模仿了 macOS 行为和用户代理。

所以,简短的回答是不可能

但是,您可以尝试解决此问题的答案。

  • 我觉得这个最有道理。当检测MacIntel时,我们会检查它是否是触摸设备,如果是,我们就知道它是iPad。这目前有效,但未来可能不安全(当苹果电脑开始变成触摸屏时),但目前这可以按预期工作,而不依赖于尺寸。谢谢您的链接:) (2认同)

boj*_*ojo 16

目前,在 2020 年 10 月,我知道的唯一方法是:

(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 0) || navigator.platform === 'iPad'
Run Code Online (Sandbox Code Playgroud)

  • 截至本文发布时,已检测到 iPad 上的 Safari、Firefox 和 Chrome。 (2认同)

小智 7

您可以为此使用正则表达式。

var isIPadPro = /Macintosh/.test(navigator.userAgent) && 'ontouchend' in document;
Run Code Online (Sandbox Code Playgroud)