UA字符串适配问题:完善移动/平板跳转逻辑及iPadPro适配修复
优化移动端/平板端UA检测与跳转脚本
这里有一个优化后的解决方案,既能覆盖更多平板UA,又能修复iPad Pro在Chrome里的误判问题:
优化后的代码
// 先检测平板设备 const isTablet = /(ipad|tablet|playbook|silk|kindle|surface|(android(?!.*mobile))|(crios.*ipad))/i.test(navigator.userAgent); // 再检测移动设备(手机) const isMobile = /(iphone|ipod|android.+mobile|blackberry|iemobile|opera mini)/i.test(navigator.userAgent); if (isTablet) { window.location.replace("http://127.0.0.1/T/"); } else if (isMobile) { window.location.replace("http://127.0.0.1/M/"); }
关键改进点
- 调整检测顺序:先判断平板,再判断手机。因为部分平板(比如iPad的某些浏览器UA)会包含
Mobile关键词,如果先检测手机会被误判,优先检测平板能确保正确匹配设备类型。 - 修复iPad Pro Chrome适配问题:专门添加了
crios.*ipad的正则规则,Chrome for iOS(CriOS)的iPad设备(包括iPad Pro)即使UA里带有Mobile,也会被识别为平板,跳转至T目录。 - 扩展平板UA覆盖范围:新增了
kindle(亚马逊平板)、surface(微软Surface系列)等常见平板关键词,同时保留了原有安卓平板(不带mobile后缀)、PlayBook、Silk等规则,覆盖更多平板设备。 - 完善移动设备匹配:补充了
opera mini这类手机端专属浏览器的UA标识,让手机设备的检测更全面。
验证示例
拿你提供的iPad CriOS UA举例:
Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/30.0.1599.12 Mobile/11A465 Safari/8536.25 (3B92C18B-D9DE-4CB7-A02A-22FD2AF17C8F)
这个UA会被crios.*ipad规则匹配,判定为平板,正确跳转至http://127.0.0.1/T/,不会再误跳移动端目录。
内容的提问来源于stack exchange,提问作者Kalxn Paraiso




