当前位置:   article > 正文

Vue(h5)与App(android,ios)端交互详解_vue调用ios方法

vue调用ios方法

前言:

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

上菜了

 

 

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

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

2.app嗲用h5方法

二、Android基本配置

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

三、 vue代码

  1. <template>
  2. <div class="box">
  3. <button @click="jsAndroid">JS调用Android方法</button>
  4. <button @click="jsIos">JS调用IOS方法</button>
  5. <button @click="jsAI">JS调用Android||IOS方法</button>
  6. <div>
  7. <span>Android||IOS调用h5方法,控制内用显示</span>
  8. <div v-if="isShow">
  9. <img src="https://imgsa.baidu.com/forum/w%3D580/sign=1b2a89cb16950a7b75354ecc3ad0625c/2635349b033b5bb59ec8f2033dd3d539b600bc35.jpg" alt="">
  10. </div>
  11. </div>
  12. <div>
  13. <span>Android||IOS调用h5方法,并传值</span>
  14. <img :src="imgUrl" alt="">
  15. </div>
  16. </div>
  17. </template>
  18. <script>
  19. import { toRefs, reactive, onMounted } from "vue";
  20. export default {
  21. // vue3.0 钩子函数写法
  22. setup() {
  23. const obj = reactive({
  24. isShow: false,
  25. content: "接受内容",
  26. imgUrl:'https://pic4.zhimg.com/v2-112e0474e000e98e8fbd22ced185c923_b.gif',
  27. // 这里Android和ios判断固定了,判断方法这里就不写了,网上很多资料
  28. isIOS:false,
  29. isAndroid:true
  30. })
  31. onMounted(()=>{
  32. window.sendImageURL=sendImageURL
  33. window.show=()=>{
  34. obj.isShow=!obj.isShow
  35. }
  36. })
  37. const jsAndroid=()=>{
  38. window.handleMessage.toast('你好,调用成功?')
  39. }
  40. const jsIos=()=>{
  41. window.webkit.messageHandlers.handleMessage.toast('你好,调用成功?');
  42. }
  43. const jsAI=()=>{
  44. //app端会拿到对应的方法,然后app端做处理
  45. if (obj.isIOS) {
  46. window.webkit.messageHandlers.handleMessage.toast('1212121');
  47. } else if (obj.isAndroid) {
  48. window.handleMessage.toast('你好,调用成功?')
  49. }
  50. }
  51. const sendImageURL=(imgUrl)=>{
  52. obj.imgUrl=imgUrl
  53. }
  54. return {
  55. ...toRefs(obj),
  56. jsAndroid,
  57. jsIos,
  58. jsAI,
  59. sendImageURL
  60. };
  61. },
  62. };
  63. </script>
  64. <style lang="scss" scoped>
  65. * {
  66. margin: 0px;
  67. padding: 0px;
  68. }
  69. .box {
  70. display: flex;
  71. flex-direction: column;
  72. button {
  73. margin: 10px;
  74. padding: 18px;
  75. background: gold;
  76. color: #fff;
  77. font-weight: 700;
  78. border: none;
  79. }
  80. img {
  81. width: 188px;
  82. height: 127px;
  83. }
  84. }
  85. </style>

四、App调用h5方法

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

Vue代码

  1. onMounted(()=>{
  2. //挂载方法到window上面
  3. window.sendImageURL=sendImageURL
  4. //可以直接定义成匿名函数
  5. window.show=()=>{
  6. obj.isShow=!obj.isShow
  7. }
  8. })
  9. const sendImageURL=(imgUrl)=>{
  10. obj.imgUrl=imgUrl
  11. }

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

sendImageURL:方法名

img:需要传递的参数

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

IOS类似Android

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

五、h5调用app方法

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

 

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

toast:app上定义的方法名称

  1. const jsAndroid=()=>{
  2. window.handleMessage.toast('你好,调用成功?')
  3. }
  4. const jsIos=()=>{
  5. window.webkit.messageHandlers.toast.postMessage('你好,调用成功?');
  6. }
  7. const jsAI=()=>{
  8. //app端会拿到对应的方法,然后app端做处理
  9. if (obj.isIOS) {
  10. window.webkit.messageHandlers.toast.postMessage('1212121');
  11. } else if (obj.isAndroid) {
  12. window.handleMessage.toast('你好,调用成功?')
  13. }
  14. }

Android代码

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

以上就是遇到的问题和总结,希望对你有帮助。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/443367
推荐阅读
相关标签
  

闽ICP备14008679号