需求想要的效果是 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;
}
}
2020.04.01 更新
還有一個解決方式
讓ios的開發把機型配置修改一下成 ipad,這樣雖然H5可以不用變動,但在app裡的H5是管用,如果wap頁面還是要像上面修改
感謝大家支援!