网站首页 > 技术文章 正文
在一些app场景中,经常看到app里面嵌套H5页面, 安卓和ios提供一个空壳子,方法两者互相调用。上一周就是写H5页面让安卓和ios调用使用,中间传参,接受参数。通过 window.wx 对象调用一些原生 app 的功能。这个H5页面,我用的是vue来写的。用到了vue全家桶。
1.调用app方法。
因为安卓和ios不同。需要写一个方法,来判断机型是安卓或者是ios;
function checkDevice() {
 // js判断是否是苹果设备
 function checkIsAppleDevice() {
 var u = navigator.userAgent,
 app = navigator.appVersion;
 var ios = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
 var iPad = u.indexOf("iPad") > -1;
 var iPhone = u.indexOf("iPhone") > -1 || u.indexOf("Mac") > -1;
 if (ios || iPad || iPhone) {
 return true;
 } else {
 return false;
 }
 }
 //js判断是否为Android设备
 function checkIsAndroidDevice() {
 var u = navigator.userAgent;
 if (u.indexOf("Android") > -1 || u.indexOf("Adr") > -1) {
 return true;
 } else {
 return false;
 }
 }
 if (checkIsAppleDevice()) {
 return "ios";
 } else {
 return "andriod";
 }
}
export default checkDevice;
上面写好的,直接拿来用,在你需要的组件中引入就行。在app.vue中引入这个js文件。因为一进来就要获取token值。前提是用户登录了。
获取app传过来的token值。iOSInfo.token这个是ios定义的方法,andriod.token安卓传过来的token。有些功能,需要判断用户是否登录,就是根据app端传来的token值判断,有值就可以进行操作,没有跳动到登录页面,存储方式,测试的时候,安卓和ios不支持localStorage,支持sessionStorage。把得到的值存储到sessionStorage里面就行,然后那个地方需要,就获取一下就行,一般都是在请求接口的时候携带上去。
this.phone = checkDevice();
 getAndioOfIOSInfoList() {
 // js判断是否为ios设备
 if (this.phone== "ios") {
 let iOSInfo = JSON.parse(JSON.stringify(window.iOSInfo));
sessionStorage.setItem("token", iOSInfo.token);
 this.$store.dispatch("getUserId", iOSInfo.userId);
 } else {
 let andriod = JSON.parse(Android.getToken()); //token
sessionStorage.setItem("token", andriod.token);
 this.$store.dispatch("getUserId", andriod.userId);
 }
 }
上面因为和安卓和ios沟通,需要给我返回token和用户信息,我是直接把用户信息存储到vuex,因为每个页面都需要用到用户信息。所以存放到vuex中,方便每个页面使用。
有时候,需要在二级页面进入一级页面的时候,需要监听安卓和ios方法,让他们返回,在这个时候我们只需要监听安卓和ios定义的方法就行。也是需要判断机型。handleGoTo这个是前端自己写的一个返回上一级的方法名。
handleGoTo() {
 //原生返回上一级页面
 if (this.phone == "ios") {
 // ios返回上一级
 webkit.messageHandlers.gotoHomePage.postMessage({});
 } else {
 Android.back(); //安卓方法
 }
 },
webkit.messageHandlers.gotoHomePage.postMessage({});监听ios一个方法,gotoHomePage就是ios定义的方法,只需要调用这个放个即可,不需要加上window,默认就是全局的。但是在postMessage一定要传一个空对象即可。
Android.back()安卓的就不需要太麻烦了,很友好,只需要调用安卓给我定义的方法名back()即可。
只要是返回上一级或者跳转登录,注册页面,都可以这样写。只是安卓和ios可能定义方法不同
2.调用H5方法
在一些场景中,需要我们传一些参数给app。让他们调用,这时候就需要app端调用我们的方法,把对应的参数传给他们就行。也是需要判断机型。jumpToPAage就是安卓和ios定义的方法名,名字一样不一样都可以的
以上都是和安卓和ios在工作中两者之间互相调用的方法,总结一下,方便以后查询使用。
猜你喜欢
- 2024-10-02 Vue3,Vuex,集中式状态(数据)管理,四个模块:state、getter
 - 2024-10-02 Vue核心知识:8.4 如何在组件中去使用vuex的值和方法?
 - 2024-10-02 Netflix 开源危机管理工具 Dispatch,真香
 - 2024-10-02 Vuex基本使用(vuex的基本使用)
 - 2024-10-02 vue组件间传递参数的几种方式(vue组件之间的参数传递)
 - 2024-10-02 2024前端面试题(三)(2021前端最新面试题)
 - 2024-10-02 Vue.js应用的四种AJAX请求数据模式以及优缺点
 - 2024-10-02 总结4个方面优化Vue项目(如何优化vue项目)
 - 2024-10-02 Node + Express + Mysql + Vue 全栈开发项目:Todo List
 - 2024-10-02 Vuex使用指南-Actions(三)(vuex的使用流程)
 
- 最近发表
 - 
- 聊一下 gRPC 的 C++ 异步编程_grpc 异步流模式
 - [原创首发]安全日志管理中心实战(3)——开源NIDS之suricata部署
 - 超详细手把手搭建在ubuntu系统的FFmpeg环境
 - Nginx运维之路(Docker多段构建新版本并增加第三方模
 - 92.1K小星星,一款开源免费的远程桌面,让你告别付费远程控制!
 - Go 人脸识别教程_piwigo人脸识别
 - 安卓手机安装Termux——搭建移动服务器
 - ubuntu 安装开发环境(c/c++ 15)_ubuntu安装c++编译器
 - Rust开发环境搭建指南:从安装到镜像配置的零坑实践
 - Windows系统安装VirtualBox构造本地Linux开发环境
 
 
- 标签列表
 - 
- cmd/c (90)
 - c++中::是什么意思 (84)
 - 标签用于 (71)
 - 主键只能有一个吗 (77)
 - c#console.writeline不显示 (95)
 - pythoncase语句 (88)
 - es6includes (74)
 - sqlset (76)
 - apt-getinstall-y (100)
 - node_modules怎么生成 (87)
 - chromepost (71)
 - flexdirection (73)
 - c++int转char (80)
 - mysqlany_value (79)
 - static函数和普通函数 (84)
 - el-date-picker开始日期早于结束日期 (76)
 - js判断是否是json字符串 (75)
 - c语言min函数头文件 (77)
 - asynccallback (87)
 - localstorage.removeitem (77)
 - vector线程安全吗 (73)
 - java (73)
 - js数组插入 (83)
 - mac安装java (72)
 - 无效的列索引 (74)
 
 
