uniappAPP和webview互相通讯,webview调用APP原生方法

因为公司开发的公司内部APP功能没有太多涉及到原生方法,加上功能迭代太快,如果一直更新APP导致体验不好,所以决定所有页面都用webview来做,APP就一个壳子,里面所有页面都在外面,这里就有一个APP和webview通讯的问题,网上找了一些解决方案,试了很多方法

APP端

<template><web-view :src="url" ref="webview" @message="message"></web-view>
</template><script>let currentWebview;export default {data() {return {url: ''};},onLoad(e) {this.url = 'webview路径'this.$nextTick(() => {currentWebview = this.$scope.$getAppWebview()})},methods: {message(e) {//webview发送给app的消息let apis = JSON.parse(e.detail.data[0])uni[apis.apiKey]({...apis.data,success: (e) => {if (apis.isSuccessFn) {setTimeout(function() {let wv = currentWebview.children()[0]wv.evalJS(`apiSuccess(${JSON.stringify(e)})`)}, 0);}},fail: (e) => {if (apis.isFailFn) {setTimeout(function() {let wv = currentWebview.children()[0]wv.evalJS(`apiFail(${JSON.stringify(e)})`)}, 0);}}})}}}
</script>

webview里面的,这里的h5也是uniapp,如果是其他的也可以修改

main.js

//首先引入uniapp的配置文件,官网自己找下载连接
import App from './App'
import '@/static/js/uni.webview.1.5.4'
import Vue from 'vue'
document.addEventListener('UniAppJSBridgeReady', function() {Vue.config.productionTip = falseconst app = new Vue({...App})app.$mount()
});

封装的js

export function uniApi(apiKey, data = {}) {if (data.success) {window.apiSuccess = data.success}if (data.fail) {window.apiFail = data.fail}uni.webView.getEnv(async (res) => {if (res.plus) {//APP里面的webview环境uni.webView.postMessage({data: JSON.stringify({apiKey: apiKey,data: data,isSuccessFn: data.success ? true : false,isFailFn: data.fail ? true : false,})})}else{try {uni[apiKey](data)} catch (e) {console.log(e)}}})if (env === 'plus') {} else {try {uni[apiKey](data)} catch (e) {console.log(apiKey)console.log(e)}}
}

页面需要调用APP原生方法,比如调用一个扫码功能,h5是不具备扫码功能

uniApi('scanCode',{onlyFromCamera: true, // 只允许从相机扫码success(res) {console.log("扫码成功:"+JSON.stringify(res))// 扫码成功后  在此处理接下来的逻辑},fail(err) {uni.showToast({title: "扫描失败",icon: "none",duration: 1000,});},
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/15752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

collect2: fatal error: ld terminated with signal 9 [Killed]

在 WSL2 中编译 LLVM遇到了如下报错&#xff1a; collect2: fatal error: ld terminated with signal 9 [Killed] 经过查询&#xff0c;发现是因为内存不足&#xff0c;造成进程被killed。 默认WSL2 的内存是主机内存的50%或者8GB。因此提高内存上限即可。如果主机内存有限&am…

缓存穿透、缓存雪蹦、缓存击穿记录

缓存穿透&#xff1a; 多个恶意并发请求不存在的数据&#xff0c;缓存中没有&#xff0c;导致多个请求进入到数据库&#xff0c;数据库中查询null&#xff0c;没有返回数据到缓存中&#xff0c;导致一直有大量请求到数据库中。数据库压力过大&#xff0c;这种情况叫做缓存击穿。…

Vue没有node_modules怎么办

npm install 一下 然后再npm run serve 就可以运行了

基于多任务学习卷积神经网络的皮肤损伤联合分割与分类

文章目录 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network摘要本文方法实验结果 Joint segmentation and classification of skin lesions via a multi-task learning convolutional neural network 摘要 在…

CVPR2023新作:3D感知的AI换脸算法

Title: 3D-Aware Face Swapping (3D感知的人脸交换) Affiliation: 上海交通大学人工智能研究所 Authors: Yixuan Li, Chao Ma, Yichao Yan, Wenhan Zhu, Xiaokang Yang Keywords: Face swapping, 3D human faces, Generative Adversarial Network, geometry Summary: (1):…

Python实现GA遗传算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世…

青龙面板的安装和使用

玩nas除了看看电影&#xff0c;那肯定还得玩转docker&#xff0c;这期讲的就是青龙面板&#xff0c;一个跑脚本的神器。 GitHub地址&#xff1a;青龙面板 1.安装 你安装完docker那就很简单了&#xff0c;不懂可以看看我这篇博客docker安装 镜像源一定要搞&#xff0c;要不然…

vue params传参刷新网页数据丢失解决方法

这里有一段代码&#xff0c;我想让它刷新网页数据不会丢失的同时&#xff0c;还不希望数据显示在url地址里。 发送数据页面Q: this.$router.push({name:A,params:{val:JSON.stringify(val)}})接收数据页面A: val:JSON.parse(this.$route.params.val)这时刷新页面A&#xff0c;…

bigemap工程工程行业应用

客户目前主要是需求为使用下载卫星图、等高线、水系、路网等等元素数据做线路规划图 其他信息 客户需要的图中还包含一些农作物以及需要在软件上标注带有箭头的线段&#xff08;不能满足&#xff09; 如下图&#xff1a; 使用场景&#xff1a; 目前主要为制图、规划线路等等…

1.1.2 SpringCloud 版本问题

目录 版本标识 版本类型 查看对应版本 版本兼容的权威——官网&#xff1a; 具体的版本匹配支持信息可以查看 总结 在将Spring Cloud集成到Spring Boot项目中时&#xff0c;确保选择正确的Spring Cloud版本和兼容性是非常重要的。由于Spring Cloud存在多个版本&#xff0c;因此…

力扣 509. 斐波那契数

题目来源&#xff1a;https://leetcode.cn/problems/fibonacci-number/description/ C题解1&#xff1a;根据题意&#xff0c;直接用递归函数。 class Solution { public:int fib(int n) {if(n 0) return 0;else if(n 1) return 1;else return(fib(n-1) fib(n-2));} }; C题…

socket 基础

Socket是什么呢&#xff1f; ① Socket通常也称作“套接字”&#xff0c;用于描述IP地址和端口&#xff0c;是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。 ② Socket是连接运行在网络上的两个程序间的双向通信的端点。 ③ 网络通讯其实指…

第九十三回 在Flutter中mock数据

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了"在Flutter中解析JSON数据"相关的内容&#xff0c;本章回中将介绍 如何mock数据.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的mock数据主要是通过相关的代码模拟服务器…

【Go语言】Golang保姆级入门教程 Go初学者介绍chapter1

Golang 开山篇 Golang的学习方向 区块链研发工程师&#xff1a; 去中心化 虚拟货币 金融 Go服务器端、游戏软件工程师 &#xff1a; C C 处理日志 数据打包 文件系统 数据处理 很厉害 处理大并发 Golang分布式、云计算软件工程师&#xff1a;盛大云 cdn 京东 消息推送 分布式文…

【RabbitMQ】golang客户端教程2——工作队列

任务队列/工作队列 在上一个教程中&#xff0c;我们编写程序从命名的队列发送和接收消息。在这一节中&#xff0c;我们将创建一个工作队列&#xff0c;该队列将用于在多个工人之间分配耗时的任务。 工作队列&#xff08;又称任务队列&#xff09;的主要思想是避免立即执行某些…

Redis 异常处理:连接失败、数据库满、缓存雪崩、缓存击穿和缓存穿透

目录 1. 连接失败2. 数据库满3. 缓存雪崩4. 缓存击穿&#xff1a;5. 缓存穿透&#xff1a; Redis使用过程中&#xff0c;可能会遇到各种异常情况&#xff0c;例如&#xff1a;连接失败、数据库满、缓存雪崩、缓存击穿和缓存穿透等。这些异常情况可能会导致系统崩溃&#xff0c;…

pip安装lap出现问题

解决方法一 用conda安装&#xff0c;用以下命令&#xff1a; conda install -c conda-forge lap解决方法二 用pip安装&#xff0c;用以下命令&#xff1a; pip install gitgit://github.com/gatagat/lap.git文章目录 解决方法一解决方法二摘要YoloV8改进策略&#xff1a;基…

opencv介绍及环境搭建

文章目录 前言一、opencv介绍二、开发环境搭建三、测试总结前言 本篇文章开始学习opencv的知识,opencv主要用于图像处理和识别,在生活中到处都是可以见到的,那么本篇文章就正式带大家来学习opencv。 一、opencv介绍 OpenCV(Open Source Computer Vision Library)是一个…

P5718 【深基4.例2】找最小值

题目描述 给出 n n n 和 n n n 个整数 a i a_i ai​&#xff0c;求这 n n n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n n n&#xff0c;表示数字个数。 第二行输入 n n n 个非负整数&#xff0c;表示 a 1 , a 2 … a n a_1,a_2 \dots a_n a1​,a2​……

短视频矩阵源码

一、短视频矩阵源码搭建解析&#xff1a; 目录 一、短视频矩阵源码搭建解析&#xff1a; 二、短视频矩阵源码的开发路径分享&#xff1a; 三、短视频矩阵系统开发应具备哪些能力&#xff1f; 短视频技术开发能力&#xff1a; 开发人员应具备短视频相关技术能力&#xff0c…