MaD*_*_LK 10 javascript ipad ios ios13 ipados13
我可以在iPhone上检测到iOS 13,但在iPad OS 13中navigator.platform
是MacIntel。因此,无法使用以下代码识别iPad,但它在iPhone上可以完美运行。
if (/iP(hone|od|ad)/.test(navigator.platform)) {
var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
var version = [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
return version;
}
Run Code Online (Sandbox Code Playgroud)
当我们要求使用iPad上的浏览器访问移动网站时,它将navigator.platform
返回iPad,并且可以完美运行。
谁能建议使用Javascript 识别在iOS 13及更高版本上运行的iPad的方法?
Ste*_*son 12
通过检查和navigator.maxTouchPoints
,我可以使iPad检测正常工作navigator.platform
。它并不完美(如下面的评论中所述),但这是我到目前为止遇到的最好的解决方案,所以我想分享。
const iPad = (userAgent.match(/(iPad)/) /* iOS pre 13 */ ||
(navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) /* iPad OS 13 */);
Run Code Online (Sandbox Code Playgroud)
TL; 博士
const iPad = !!(navigator.userAgent.match(/(iPad)/)
|| (navigator.platform === "MacIntel" && typeof navigator.standalone !== "undefined"))
Run Code Online (Sandbox Code Playgroud)
我们可以使用navigator.standalone
参数。它是非标准的,目前仅在 iOS Safari 上使用:
Navigator.standalone
返回一个布尔值,指示浏览器是否在独立模式下运行。仅适用于 Apple 的 iOS Safari。
当与navigator.platform === "MacIntel"
iPad结合使用时,是唯一定义此属性的设备,因此会typeof navigator.standalone !== "undefined"
过滤掉运行 Safari 的 Mac(触摸屏与否)。
我设置了一个 CodeSandbox 并在 Browserstack 上手动测试,似乎按预期工作:https ://bc89h.csb.app/
我还没有对此进行过广泛的测试,但应该给其他人一个很好的起点:
const version = navigator.userAgent.match(/Version\/(\d+)\.(\d+)\.?(\d+)?/);
const major = version && version[1] ? version[1] : "";
const minor = version && version[2] ? version[2] : "";
const patch = version && version[3] ? version[3] : "";
Run Code Online (Sandbox Code Playgroud)
以上获取版本并将其分解为主要、次要和补丁元素。这似乎适用于我对其进行了快速测试的 iOS 12 和 13。上面的 SandBox 链接显示了输出。