H5与Android和Ios之间的交互
H5页面是由uni-App框架开发的,有想了解的可以先了解下uni-App这个框架:https://uniapp.dcloud.io/README。(用来写H5自我认为很方便。)
uni-app
是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/飞书/QQ/快手/钉钉/淘宝)、快应用等多个平台。
uni-App这个框架是通过专用的编译器来完成编译及打包的---> HBuilder X ;
接下来就进入正题:
H5与两端交互问题(Android和Ios) 其实也算是挺简单的吧!
比如说调用相册,打开相机,上传,下载,登录等,当然,这里调用的方法不是固定的,是需要你和两端商量提供给你的方法。如下代码所示,
注:区分两端的方法我们这里使用了uni-App里的 uni.getSystemInfo 方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | devices.js 页面<br><br> // 给客户端发消息 export const webJSBridge = (type, params = {}) => { uni.getSystemInfo({ success: (res) => { const isIOSDevices = res.platform === "ios" ; switch (type) { case "share" : if (isIOSDevices) { window.webkit.messageHandlers.share.postMessage( JSON.stringify(params) ); } else { window.android.share(JSON.stringify(params)); } break ; case "wechatLogin" : if (isIOSDevices) { window.webkit.messageHandlers.wxLogin.postMessage( JSON.stringify(params) ); } else { window.android.wxLogin(JSON.stringify(params)); } break ; case "QQLogin" : if (isIOSDevices) { window.webkit.messageHandlers.qqLogin.postMessage( JSON.stringify(params) ); } else { window.android.qqLogin(JSON.stringify(params)); } break ; case "saveImage" : if (isIOSDevices) { window.webkit.messageHandlers.saveImage.postMessage( JSON.stringify(params) ); } else { window.android.saveImage(JSON.stringify(params)); } break ; case "takePhoto" : if (isIOSDevices) { window.webkit.messageHandlers.takePhoto.postMessage( JSON.stringify(params) ); } else { window.android.takePhoto(JSON.stringify(params)); } break ; case "choosePhoto" : if (isIOSDevices) { window.webkit.messageHandlers.choosePhoto.postMessage( JSON.stringify(params) ); } else { window.android.choosePhoto(JSON.stringify(params)); } break ; case "captureScreen" : if (isIOSDevices) { window.webkit.messageHandlers.captureScreen.postMessage( JSON.stringify(params) ); } else { window.android.captureScreen(JSON.stringify(params)); } break ; case "jsbridgeHandle" : // const params = { // type: 1,1 关闭2 开始AI运动3 vip弹框4 去运动圈弹框5截长图6 分享 7保存图片 8复制到剪切板 // callbackName: "", // data: {}, // }; if (isIOSDevices) { window.webkit.messageHandlers.jsbridgeHandle.postMessage( JSON.stringify(params) ); } else { window.android.jsbridgeHandle(JSON.stringify(params)); } break ; default : break ; } }, }); }; // 接收消息 export const getDeviceMessageFunc = (self) => { window.wxLoginResult = (res) => { self.$bus.emit( "getDeviceMessage" , { ...res, type: "wxLogin" , }); }; window.qqLoginResult = (res) => { self.$bus.emit( "getDeviceMessage" , { ...res, type: "qqLogin" , }); }; window.choosePhotoResult = (res) => { self.$bus.emit( "getDeviceMessage" , { ...res, type: "choosePhoto" , }); }; window.takePhotoResult = (res) => { self.$bus.emit( "getDeviceMessage" , { ...res, type: "takePhoto" , }); }; window.reloadCalendar = (res) => { self.$bus.emit( "getDeviceMessage" , { ...res, type: "reloadCalendar" , }); }; }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | App.vue 页面: <script> import VConsole from "vconsole" ; import { getDeviceMessageFunc } from "@/utils/devices.js" ; export default { onLaunch: function () { // const vConsole = new VConsole(); getDeviceMessageFunc( this ); }, onShow: function () {}, onHide: function () {}, }; </script> |
努力到无能为力,拼搏到感动自己。
欢迎大家在下方多多评论。
分类:
框架之vue,react
, uni-app
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了