天天看點

用xcode11打包app H5判斷ipadpro機型 navigator.userAgent

需求想要的效果是 web/wap自動跳轉,ipad歸于wap跳轉H5頁面

新版app更新Xcode11來打新包出現ipadPro 不識别是ipad機型

首先ipadPro本來就是一個特殊機型!!(神坑)

用navigator.userAgent方法列印下面一堆

下圖是iphone7p真機浏覽器彈框
用xcode11打包app H5判斷ipadpro機型 navigator.userAgent
下圖是ipadPro 在浏覽器上彈出
用xcode11打包app H5判斷ipadpro機型 navigator.userAgent
下圖是谷歌浏覽器

分别是浏覽器模拟iphone6/7,ipad ,ipadPro 列印出結果

用xcode11打包app H5判斷ipadpro機型 navigator.userAgent
  1. iphone都還正常,會傳回機型iphone也會有系統mac os,也會顯示mobile
  2. ipad出來的雖然有系統mac os 但是還有機型iPad
  3. 再看ipadPro真機彈框 根本就沒傳回機型iPad!!!是以ipadPro不屬于ipad了嗎?
  4. 也不能用系統mac os來判斷,那樣是以蘋果電腦就不能排除了
  5. 在電腦上模拟ipadPro壓根是測不出來問題,在真機上就會出bug,是以還是要真機測試一下

其次還有一個問題

就是xcode11打包,app更新xcode10->xcode11,是以打包出來總是新包出現問題,我還是alert出問題所在,看下圖是xcode11打包之後在app上用navigator.userAgent方法彈出

用xcode11打包app H5判斷ipadpro機型 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頁面還是要像上面修改

感謝大家支援!