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

这篇具有很好参考价值的文章主要介绍了Vue(h5)与App(android,ios)端交互详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

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

上菜了

vue写h5项目嵌入app,Vue,vue.js,android,ios,webview,交互vue写h5项目嵌入app,Vue,vue.js,android,ios,webview,交互

 

 

一、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代码

<template>
  <div class="box">
    <button @click="jsAndroid">JS调用Android方法</button>
    <button @click="jsIos">JS调用IOS方法</button>
    <button @click="jsAI">JS调用Android||IOS方法</button>
    <div>
      <span>Android||IOS调用h5方法,控制内用显示</span>
      <div v-if="isShow">
       <img src="https://imgsa.baidu.com/forum/w%3D580/sign=1b2a89cb16950a7b75354ecc3ad0625c/2635349b033b5bb59ec8f2033dd3d539b600bc35.jpg" alt="">
    </div>
    </div>
    <div>
      <span>Android||IOS调用h5方法,并传值</span>
      <img :src="imgUrl" alt="">
    </div>
  </div>
</template>
<script>
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
    };
  },
};
</script>
<style lang="scss" scoped>
* {
  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;
  }
}
</style>

四、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上,不然回报未定义,点掉叉号后虽然调用的时候能成功。vue写h5项目嵌入app,Vue,vue.js,android,ios,webview,交互

 

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();
        }

    }

以上就是遇到的问题和总结,希望对你有帮助。文章来源地址https://www.toymoban.com/news/detail-687104.html

到了这里,关于Vue(h5)与App(android,ios)端交互详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue项目h5端判断所处环境(支付宝、微信、判断安卓和iOS环境)

    一、判断是否为支付宝坏境 isAlipayClient () {     if (navigator.userAgent.indexOf(\\\'AlipayClient\\\') -1) {       return true     }     return false   }, 二、判断安卓还是ios   phoneOs () {     var u = navigator.userAgent,       isAndroid = u.indexOf(\\\'Android\\\') -1 || u.indexOf(\\\'Linux\\\') -1,       isiOS = !!u.match(/(i[^;]+;(

    2024年02月07日
    浏览(73)
  • 端午假期整理了仿天猫H5 APP项目vue.js+express+mongo

    源码太多,放github上了点击 mongodb与mysql数据库连接不同,sql在定义查询语句时可以连接不同的表 mongodb需要在开始定义好连接要用到的表 登录QQ邮箱 点击左上角设置 选择账户栏往下翻 有一个POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务栏,选择IMAP/SMTP服务开启选项,如图.记得记录给你的

    2023年04月08日
    浏览(32)
  • vue3实现H5网页录音并上传(mp3、wav)兼容Android、iOS和PC端

    使用 Recorder插件 可以在HTML5网页中进行录音,录音完成后得到blob文件对象,然后将blob上传到服务器;项目使用的vue3.0版本(这个插件同时支持vue2.0、也支持uniapp,很强!!),录音过程中会显示可视化波形,同时能够做到兼容PC端、Android、和iOS,一次编码 到处运行,哈哈

    2024年02月08日
    浏览(53)
  • 前后端分离项目,vue+uni-app+php+mysql电影院售票系统(H5移动项目) 开题报告

      毕业论文 基于Vue.js电影院售票系统(H5) 开题报告 学    院:                        专    业:                          年    级:                         学生姓名:                        指导教师:       黄菊华  

    2024年02月07日
    浏览(52)
  • uniapp条件编译区分ios、android、小程序、h5、app等

    条件编译 条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。 **写法:**以 #ifdef 或 #ifndef 加 %PLATFORM% 开头,以 #endif 结尾。 示例代码: 注意 Android 和 iOS 平台不支持通过条件编译来区分,如果需要区分 Android、iOS 平台,请

    2024年02月09日
    浏览(44)
  • uniapp 发送全文件 支持App端ios、android,微信小程序,H5

    由于uniapp提供的API在app端只能上传图片和视频,不能上传其他文件,说以只能借助插件了。  ios端用的这个插件 获取到文件对象 免费的 ios-uniapp 文件选取word,pdf,xls等文件 - DCloud 插件市场 uniapp iOS文件选取 iOS选取text,pdf,word,doc,xls,ppt https://ext.dcloud.net.cn/plugin?id=1311 这个是返回一

    2024年02月16日
    浏览(60)
  • uni-app如何区分 app、h5、小程序代码; uni-app如何判断是android、ios、小程序

    uniapp是DCloud公司于2012年开始研发的能够一次代码开发,生成H5、小程序(微信、支付宝、百度、华为等)、APP等应用的技术的统称,开发工具是HBuilderX,功能非常强大,由此引申出许多技术社区与生态环境。 使用HBuilderX开发Uniapp程序的项目,用它生成多端应用,由于兼容各种

    2024年02月11日
    浏览(75)
  • 已解决:安卓自带的webview加载前端h5项目白屏时长严重,vue首页加载白屏时间过长,那我让app进入的时候就提前加载网页

    自己写的vue项目,自己写的安卓壳子,本来自己觉得慢,忍忍就过去了,但是人家觉得慢,你不得改么?结果是前端自己开发,安卓也自己开发,想甩个锅都没法甩,总不能甩给后端吧?哈哈哈 描述一下我的情况,我写了一个vue项目,需要嵌在安卓里运行,没想到安卓webvi

    2024年02月03日
    浏览(62)
  • winform使用CefSharp嵌入VUE网页并交互

    1、NuGet添加CefSharp 如果下载慢或失败可以更新下载源 腾讯资源 https://mirrors.cloud.tencent.com/nuget/ 华为资源 https://repo.huaweicloud.com/repository/nuget/v3/index.json  2、将项目平台改为X64 3、在winform窗体添加cef ChromMenuHandler BoundObject 4、vue代码编写 5、打包vue并放到项目下并设置复制到输出

    2024年02月04日
    浏览(43)
  • uniapp开发WebRTC语音直播间支持app(android+IOS)和H5,并记录了所有踩得坑

    1. 创建自己的语音直播间 2. 查询所有直播间列表 3.加入房间 4.申请上位 5.麦克风控制 6.声音控制 7.赠送礼物(特效 + 批量移动动画) 8.退出房间 1.uniapp 实现客户端H5、安卓、苹果 2.webRTC实现语音直播间(具体原理网上有很多文章我就不讲了,贴个图) 3.使用node.js搭建信令服

    2024年02月19日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包