uniapp跨平台开发---webview调用app方法

server/2024/12/25 21:08:05/

1.app端实现

注意:为了实现实时通信,app端页面是.nvue

代码实现

<template><view class="content"><view class="web-view"><web-view class="web-view" :src="url" ref="webview" @onPostMessage="onPostMessage"></web-view></view></view>
</template><script>export default {data() {return {url: '',}},methods: {onPostMessage(e) {let method = e.detail.data[0].methodlet value = e.detail.data[0].valueswitch (method) {case 'test':console.log("test")break;case 'back':uni.switchTab({url: '/pages/home/index'})break;case 'copy':uni.setClipboardData({data: value,showToast: false,success: function() {uni.showToast({title: 'copy',duration: 2000});}})break;default:break;}}}}
</script><style scoped lang="scss">.content {width: 750rpx;flex: 1;background-color: #f7f7f7f7;display: flex;align-items: center;height: 100vh;.web-view {height: 100%;width: 750rpx;flex: 1;}}
</style>

2.H5端实现(基于uniapp的H5)

2.1 manifest.json配置

将模板路径指向项目中的index.html

2.2 模板index.html配置

注意:uni.webview.1.5.2.js 文件路径,放在static文件下

资源文件放在:https://www.alipan.com/s/3DaYWBod57B

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title><%= htmlWebpackPlugin.options.title %></title><script>var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||CSS.supports('top: constant(a)'))document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +(coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" /></head><body><div id="app"></div></body><script type="text/javascript" src="./static/js/uni.webview.1.5.2.js"></script><script>document.addEventListener('UniAppJSBridgeReady', function() {uni.webView.getEnv(function(res) {console.log('当前环境:' + JSON.stringify(res));});});</script>
</html>

2.3 H5代码实现,调用app端方法

注意:调用uni.postMessage 一定要加上webView

uni.webView.postMessage({data: {method: 'getTitle',value: title}});

现在就可以实现在H5端调用app端的方法

3.遇见的问题及解决方案

3.1 H5有多个页面,app端使用.nvue无法显示网页标题

解决方案,增加通信,每一个新页面H5将网页标题传递给app端,然后app端手动更改标题(暂时想到的笨办法,有其他解决方案的欢迎交流)

app端实现代码

onPostMessage(e) {let method = e.detail.data[0].methodlet value = e.detail.data[0].valueswitch (method) {case 'getTitle':this.pageTitle = valueuni.setNavigationBarTitle({title: value})break;default:break;}}

H5端,在每个单页面onShow都获取网页标题,其实也可以直接把每个标题具体值直接传过去

onShow() {var pages = getCurrentPages()var page = pages[pages.length - 1]var title = page.$holder.navigationBarTitleTextuni.webView.postMessage({data: {method: 'getTitle',value: title}});}

3.2 H5跳转到二级页面,app端点击一下就退出webView页面了

解决方案,app端退出拦截,根据网页标题来判断是否退出当前页面,否则就控制webView页面后退

onBackPress(event) {if (this.pageTitle == 'Invitar amigos') {uni.switchTab({url: '/pages/home/index'})} else {this.$refs.webview.evalJs("javascript:history.back(-1)");}return true},

http://www.ppmy.cn/server/153142.html

相关文章

了解Hadoop

发展历程&#xff1a; 单机数据系统&#xff1a; localFS单机存储、SQL单机计算 分布式系统&#xff1a; 扩展数据存储Hadoop&#xff1a;基于磁盘&#xff1a;Hadoop核心【HDFS分布式文件系统、MapReduce分布式计算框架、资源管理和任务调度】SQL on Hadoop【Hive、Impala…

golang 熔断限流降级

限流 - 2k 但是我的服务能力只有1k&#xff0c;所以这个时候多出来的流量怎么办&#xff1a; 1. 拒绝 2. 排队等待。用户体验不太好&#xff1a; 当前访问用户过多&#xff0c;请稍后重试和你的服务直接挂了 用户体验降级了 - 原本是访问流畅&#xff0c;下单流畅 -> 当前访…

电脑丢失bcrypt.dll文件是什么原因?找不到bcrypt.dll文件修复办法来啦!

电脑运行时常见问题及解决方案&#xff1a;文件丢失、文件损坏与系统报错 作为一名软件开发从业者&#xff0c;深知电脑在日常使用中难免会遇到各种问题&#xff0c;如文件丢失、文件损坏和系统报错等。这些问题不仅影响工作效率&#xff0c;还可能带来数据丢失的风险。今天&a…

ce第六次作业

1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。 [rootServer ~]# yum install -y mailx [rootServer ~]# yum -y install bind-utils [rootServer ~]# vim /etc/mail.rc set from15339…

LeetCode 203. 移除链表元素 (C++实现)

1. 题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1a;…

opencv中的常用的100个API

以下是 OpenCV 中常用的 100 个 API&#xff0c;这些 API 涉及图像读取、处理、特征提取、绘图、视频处理等常见操作&#xff1a; 1. 图像操作 cv2.imread(filename, flags) - 读取图像。cv2.imwrite(filename, img) - 保存图像。cv2.imshow(window_name, img) - 显示图像。cv…

全国硕士研究生入学考试(考研)择校择专业之择校主要因素

全国硕士研究生入学考试&#xff08;考研&#xff09;择校择专业之择校主要因素 在中国&#xff0c;研究生入学考试&#xff08;考研&#xff09;是本科生提升学术水平、深化专业知识的重要途径。择校择专业是考研过程中至关重要的环节&#xff0c;直接关系到未来的学术发展和…

设计模式-中介模式

背景&#xff08;与外观模式相似&#xff09; 智能家庭中包括各种设备&#xff1a;闹钟、咖啡机、电视机、窗帘。 主人要看电视时&#xff0c;执行以下操作&#xff1a;闹钟响起-》咖啡机做咖啡-》窗帘自动落下-》电视开始播放 传统思路&#xff1a; 闹钟类接收命令&#x…