为什么需要重新判断 iPad?
从 iPadOS 13 开始,Safari 浏览器将 navigator.userAgent 与桌面 Mac Safari 保持一致,且 navigator.platform 变为 "MacIntel",导致传统检测(如 /iPad/)失效。为适配这一变化,我们需要更可靠的方法。
1. 检测 MacIntel + 多点触控(推荐)
结合触摸能力与平台判断,是目前最稳定的方式:
function isIpadModern() {
return navigator.platform === 'MacIntel'
&& navigator.maxTouchPoints > 1;
}
使用解释:navigator.platform === 'MacIntel' 判断桌面环境,navigator.maxTouchPoints > 1 判断触控能力,从而识别出 iPadOS 上的 “桌面 UA” Safari。
2. 检测触摸事件与 Mac OS User-Agent
通过判断是否为触摸设备,且 UA 包含 Intel Mac OS X:
function isiPadUA() {
const touch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
const macUA = navigator.userAgent.includes('Intel Mac OS X');
return touch && macUA;
}
该方法兼容度好,适用于部分 UA 更复杂的情况。
3. 结合 iPad 旧版 UA
如果你希望兼容旧版 iPad(iPadOS 12 及以下),可加入传统 UA 判断:
function isiPadAny() {
return /iPad/.test(navigator.userAgent)
|| (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
}
这样能同时识别旧版及新版 iPad。
4. 使用专业库检测(如 WURFL.js)
如果你需要识别 iPad 型号甚至 Pro / Mini:
<script src="https://cdn.jsdelivr.net/npm/wurfl.js"></script>
<script>
WURFL.load(function(wurfl) {
if (wurfl.is_ipad) {
console.log('Detected by WURFL: iPad');
}
});
</script>
借助专门数据库,适配性强、识别率高,但会增加额外依赖与加载时间。
5. 最优整合方案:组合判断
为最大兼容性,建议按以下顺序组合:
function detectIpad() {
if (/iPad/.test(navigator.userAgent)) return true;
if (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1) return true;
return false;
}
这样既覆盖旧版 iPad,也适用于 iPadOS 桌面 UA 环境,兼顾稳定与简洁。
- 不推荐 单纯依赖 UA 或 navigator.platform 判断。
- 推荐方法 为检测 MacIntel + navigator.maxTouchPoints > 1。
- 若需兼容老设备,可添加 /iPad/ 判断。
- 如需高级型号识别,可选用 WURFL 等专业工具。
通过这些方法,你可以准确识别 iPad 设备,从而做出特定适配:如触控提示、界面优化等,提升用户体验与 SEO 优势。