用xcode11打包app H5判断ipadpro机型 navigator.userAgent

Sela ·
更新时间:2024-11-10
· 681 次阅读

需求想要的效果是 web/wap自动跳转,ipad归于wap跳转H5页面

新版app升级Xcode11来打新包出现ipadPro 不识别是ipad机型

首先ipadPro本来就是一个特殊机型!!(神坑)
用navigator.userAgent方法打印下面一堆

下图是iphone7p真机浏览器弹框

在这里插入图片描述

下图是ipadPro 在浏览器上弹出

在这里插入图片描述

下图是谷歌浏览器

分别是浏览器模拟iphone6/7,ipad ,ipadPro 打印出结果
在这里插入图片描述

iphone都还正常,会返回机型iphone也会有系统mac os,也会显示mobile ipad出来的虽然有系统mac os 但是还有机型iPad 再看ipadPro真机弹框 根本就没返回机型iPad!!!所以ipadPro不属于ipad了吗? 也不能用系统mac os来判断,那样所以苹果电脑就不能排除了 在电脑上模拟ipadPro压根是测不出来问题,在真机上就会出bug,所以还是要真机测试一下 其次还有一个问题

就是xcode11打包,app升级xcode10->xcode11,所以打包出来总是新包出现问题,我还是alert出问题所在,看下图是xcode11打包之后在app上用navigator.userAgent方法弹出
在这里插入图片描述
弹出来的东西跟少了,像version/safari都没有了,但是至于什么原理还得要研究一下xcode了

重点来了----解决办法

其实后来我发现手机只要判断 ‘ontouchend’ in document 就可以了,因为大多手机肯定是需要touch事件,但是如果真要是电脑也支持touch事件也还是要做兼容了,但目前os的电脑肯定没有touch事件

所以根据之前的方法整理了如下代码,如果实践中还有兼容问题,可留言

isWap: function() { var ua = navigator.userAgent; var isMidp = ua.match(/midp/i) == "midp"; var isUc7 = ua.match(/rv:1.2.3.4/i) == "rv:1.2.3.4"; var isUc = ua.match(/ucweb/i) == "ucweb"; var isAndroid = ua.match(/android/i) == "android"; var isCE = ua.match(/windows ce/i) == "windows ce"; var isWM = ua.match(/windows mobile/i) == "windows mobile"; let isIphone = ua.indexOf("iPhone") != -1; let isIPad = !isIphone && 'ontouchend' in document; if (isIPad || isIphone || isMidp || isUc7 || isUc || isAndroid || isCE || isWM) { return true; } else { return false; } }

感谢大家支持!


作者:w++.



navigator.useragent xcode app

需要 登录 后方可回复, 如果你还没有账号请 注册新账号