第一步:建立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({})
}
}
}
工作笔记,有不对的地方,希望大佬可以指正