公司里面,有原生的安卓和ios开发,为了减少版本更新,个别页面需要用h5来写,放到服务器上,方便及时更新。
fn是方法名,strobj是传递的参数,安卓必须是以字符串的形式,ios即可以是字符串也是可以是对象,建议传对象
这是h5向安卓和ios传递参数
<template>
<div>
<div @click="callTel()">拨打电话</div>
</div>
</template>
methods:{
isLogin(){ //判断登录
let u = navigator.userAgent;
let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
let strobj = {}
if(isAndroid){
window.javatojs.isLogin(JSON.stringify(strobj)); //安卓去执行登录操作,跳转
}else if(isiOS){
window.webkit.messageHandlers.isLogin.postMessage(strobj); //安卓去执行登录操作,跳转
}
},
callTel(){ //callTel 安卓和ios共同的方法名
let _t = this
if(!this.Authorization){
Dialog({ message: '您还不是本站用户,请先登录' });
setTimeout(() =>{
Dialog.close()
_t.isLogin() //交予安卓和ios处理
},1000)
return
}
let mobile = (this.info.contacts).split(" ")[1]
let u = navigator.userAgent;
let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
let strobj={
mobile:mobile
title:'xdl',
img:'xdl',
url:'www.baidu.com',
}
if(isAndroid){
window.javatojs.callTel(JSON.stringify(strobj));
}else if(isiOS){
window.webkit.messageHandlers.callTel.postMessage(strobj);
}
},
}
上面是h5向安卓和ios传递参数,下面是安卓和ios传值给h5
Android
created(op) {
this.id = this.$route.query.id || ''
this.goApplyToken()
},
methods:{
goApplyToken(){
let u = navigator.userAgent;
let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
if(isAndroid){
//xdljs 这个是和安卓共同定义的
this.Authorization = window.xdljs.goToken()
}
},
getToken(str){
this.Authorization = str
},
}
goApplyToken是和安卓一起定义的函数名,它会有一个返回值,我们在调用嵌入的h5页面执行goApplyToken方法,就可以拿到安卓传递过来的参数了
ios
goToken必须要定义在全局,一进入这个页面,ios把值传递过来
created(op) {
this.id = this.$route.query.id || ''
window.getToken = this.getToken; //必须
},
methods:{
//获取ios传递过来得值
getToken(str){
this.Authorization = str
},
}