小工具知识网

当前位置: 首页 > 行业知识 > Vue(h5)与App(android,ios)端交互详解

行业知识

Vue(h5)与App(android,ios)端交互详解

2026-11-08 12:34:26 来源:互联网转载

前言:

最近开发vue与app交互,总结了一下开发心得。我是一名Android开发者,vue开发这块也稍有涉足,在android或者IOS中展示h5index.php/tags-653.html" >可以减少工作量,也能满足用户体验性。下面主要以Android和Vue方法介绍为主。

上菜了

 

 

一、h5与App交互的两种形式

1.h5调用app的原生方法。

2.app嗲用h5方法

二、Android基本配置

 WebSettings webSettings=webView.getSettings();        //设置为可调用js方法        webSettings.setJavaScriptEnabled(true);        webView.setWebViewClient(new WebViewClient());        webView.setWebChromeClient(new WebChromeClient());        //js调用android        webView.addJavascriptInterface(new JsCommunication(), "handleMessage");        //你自己的h5地址        webView.loadUrl("http://192.168.23.6:8080/#/webview");

三、 vue代码

      JS调用Android方法    JS调用IOS方法    JS调用Android||IOS方法          Android||IOS调用h5方法,控制内用显示                               Android||IOS调用h5方法,并传值            import { toRefs, reactive, onMounted } from "vue";export default {  // vue3.0 钩子函数写法  setup() {    const obj = reactive({      isShow: false,      content: "接受内容",      imgUrl:'https://pic4.zhimg.com/v2-112e0474e000e98e8fbd22ced185c923_b.gif',    //   这里Android和ios判断固定了,判断方法这里就不写了,网上很多资料      isIOS:false,      isAndroid:true    })    onMounted(()=>{        window.sendImageURL=sendImageURL        window.show=()=>{            obj.isShow=!obj.isShow        }    })    const jsAndroid=()=>{        window.handleMessage.toast('你好,调用成功?')      }    const jsIos=()=>{        window.webkit.messageHandlers.handleMessage.toast('你好,调用成功?');    }    const jsAI=()=>{        //app端会拿到对应的方法,然后app端做处理        if (obj.isIOS) {                window.webkit.messageHandlers.handleMessage.toast('1212121');            } else if (obj.isAndroid) {                window.handleMessage.toast('你好,调用成功?')             }    }    const sendImageURL=(imgUrl)=>{        obj.imgUrl=imgUrl    }    return {      ...toRefs(obj),      jsAndroid,      jsIos,      jsAI,      sendImageURL    };  },};* {  margin: 0px;  padding: 0px;}.box {  display: flex;  flex-direction: column;  button {    margin: 10px;    padding: 18px;    background: gold;    color: #fff;    font-weight: 700;    border: none;  }  img {    width: 188px;    height: 127px;  }}

四、App调用h5方法

注意,Vue中的方法通常是写在vue实例的methods中的,app无法直接调用,此时在页面的onMounted钩子里将方法挂在window下即可。

Vue代码

 onMounted(()=>{        //挂载方法到window上面        window.sendImageURL=sendImageURL        //可以直接定义成匿名函数        window.show=()=>{            obj.isShow=!obj.isShow        }    }) const sendImageURL=(imgUrl)=>{        obj.imgUrl=imgUrl    }

Android可以通过:  webView.loadUrl("javascript:sendImageURL('" + img + "')");

sendImageURL:方法名

img:需要传递的参数

 btn.setOnClickListener(v->{           //android调用js,无参数无返回值            webView.loadUrl("javascript:show()");        });        btn2.setOnClickListener(v->{            //android调用js,无参数无返回值            webView.loadUrl("javascript:sendImageURL('" + img + "')");        });

IOS类似Android

NSString *img = @"图片地址";NSString *jsStr = [NSString stringWithFormat:@"sendImageURL('%@')",img]; [self->_wkWebView evaluateJavaScript:jsStr completionHandler:^(id _Nullable d, NSError * _Nullable error) {   NSLog(@"状态---%@",d);//回调值 }];

五、h5调用app方法

 vue方法,注意一定要挂载到window上,不然回报未定义,点掉叉号后虽然调用的时候能成功。

 

handleMessage:app上面定义的接口名称

toast:app上定义的方法名称

const jsAndroid=()=>{        window.handleMessage.toast('你好,调用成功?')      }    const jsIos=()=>{        window.webkit.messageHandlers.toast.postMessage('你好,调用成功?');    }    const jsAI=()=>{        //app端会拿到对应的方法,然后app端做处理        if (obj.isIOS) {                window.webkit.messageHandlers.toast.postMessage('1212121');            } else if (obj.isAndroid) {                window.handleMessage.toast('你好,调用成功?')             }    }

Android代码

 //js调用android webView.addJavascriptInterface(new JsCommunication(), "handleMessage");  public  class JsCommunication {        @JavascriptInterface        public void toast(String json) {            Toast.makeText(MainActivity.this,json,Toast.LENGTH_LONG).show();        }    }

上一篇:揭秘站内搜索源码,优化搜索体验,助力效率飙升!

下一篇:ping怎么设置服务器?