h5怎么区分在ios、安卓、微信环境下?怎么调用原生函数

第一步:建立dieu.js文件,创建全局变量DEVICE_TYPE

//兼容页面字体
;(function flexible (window, document) {
    function isMobile(){
		if( navigator.userAgent.match(/Android/i)
			|| navigator.userAgent.match(/webOS/i)
			|| navigator.userAgent.match(/iPhone/i)
			|| navigator.userAgent.match(/iPad/i)
			|| navigator.userAgent.match(/iPod/i)
			|| navigator.userAgent.match(/BlackBerry/i)
			|| navigator.userAgent.match(/Windows Phone/i)
		){
			return true
		}else {
			return false
		}
    }
    var docEl = document.documentElement;
    var dpr = window.devicePixelRatio || 1;
  
    // adjust body font size
    function setBodyFontSize () {
		if (document.body) {
			document.body.style.fontSize = (12 * dpr) + 'px';
					if(!isMobile()){
						document.body.style.backgroundColor = '#fafafa';
						var isPc = document.body.classList.contains('is-pc');
						if(!isPc){
							document.body.classList.add('is-pc');
						}
					}
		}
		else {
			document.addEventListener('DOMContentLoaded', setBodyFontSize);
		}
    }
    setBodyFontSize();
  
    // set 1rem = viewWidth / 10
    function setRemUnit () {
		if(isMobile()){
			var rem = docEl.clientWidth / 10;
			docEl.style.fontSize = rem + 'px';
		}else{
			docEl.style.fontSize = '37.5px';
		}
    }
  
    setRemUnit();
  
    // reset rem unit on page resize
    window.addEventListener('resize', setRemUnit);
    window.addEventListener('pageshow', function (e) {
      if (e.persisted) {
        setRemUnit();
      }
    })
  
    // detect 0.5px supports
    if (dpr >= 2) {
		var fakeBody = document.createElement('body');
		var testElement = document.createElement('div');
		testElement.style.border = '.5px solid transparent';
		fakeBody.appendChild(testElement);
		docEl.appendChild(fakeBody);
		if (testElement.offsetHeight === 1) {
			docEl.classList.add('hairlines');
		}
		docEl.removeChild(fakeBody);
    }
}(window, document));

//在不同的环境下,DEVICE_TYPE赋值不同
var DEVICE_TYPE = window.DEVICE_TYPE = 1;
var deviceType = window.deviceType = function(cb){
	var isAndroid = window.navigator.userAgent.indexOf('_Swb/Android') > -1
	var isIos = window.navigator.userAgent.indexOf('_Swb/Ios') > -1
	const isMiniProgram = /miniProgram/i.test(navigator.userAgent.toLowerCase())
	if(isAndroid){
		DEVICE_TYPE = 2;
		cb(2);
	}else if(isIos){
		DEVICE_TYPE = 3;
		cb(3);
	}else{
		// 通过userAgent是否包含MicroMessenger来判断是否在微信内置浏览器打开网页
		if(isMiniProgram){
			DEVICE_TYPE = 1;
			cb(1);
		}else{
			DEVICE_TYPE = 'h5';
			cb('h5');
		}
	}
}

第二步:在index.html入口全局引入

<script src="<%= BASE_URL %>static/js/dieu.js"></script>

第三步:IOS的函数,h5需要先再created里注册,再调用(安卓端的函数可以直接调用,无需注册)

// 注册token方法
created(){
	window.getUserToken = token => {
		if(token){
			Store.set(LOCAL_STORE.aftoken, `Bearer ${token}`)
		}else{
			Store.remove(LOCAL_STORE.aftoken)
		}
	}
}

//判断不同环境下
_getSome(){
   //在微信环境下
	if(window.DEVICE_TYPE === 1) {
		if(this.$route.query.CityId){
			const city_id = this.$route.query.CityId
			city_id && Store.set(LOCAL_STORE.city_id, `${city_id}`)
		}
	}
	//在安卓环境下
	if(window.DEVICE_TYPE === 2){
		if(window.android && window.android.getUserToken && typeof window.android.getUserToken === 'function'){
			const token = window.android.getUserToken()
			token && Store.set(LOCAL_STORE.aftoken, `Bearer ${token}`)
		}
	}
	//在IOS环境下
	if(window.DEVICE_TYPE === 3){
		if(window.webkit && window.webkit.messageHandlers){
			// 获取token
			window.webkit.messageHandlers.getUserToken.postMessage({})
		}
	}
}

工作笔记,有不对的地方,希望大佬可以指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值