百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

uni-app使用经验—vue页面和html页面如何互相调用接口并传参

xsobi 2024-12-27 17:28 17 浏览

说明

最近在项目上有个移动端(uni-app)的需求,就是要在移动端APP上的vue页面中通过web-view组件来调用html页面,并且要实现在html页面中可以点击一个元素来调用vue页面中uni的API(扫码接口),同时也可以在vue页面中也可以调用html页面中的js函数并进行传参。

使用环境

1. HBuilderX版本:2.8.11.20200907

2. V3编译器

html页面调用vue页面中uni的API

引用依赖的文件

在 web-view 加载的 HTML 中调用 uni 的 API,需要在 HTML 中引用必要的 JS-SDK

Bash
<script type="text/javascript" src="//js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.0.1.52.js"></script>

注意:这些 JS 文件是在 web-view 加载的那个 HTML 文件中引用的,而不是 uni-app 项目中的文件。

监听 web-view 的 message 事件

监听 web-view 组件的 message 事件,然后在事件回调的 event.detail.data 中接收传递过来的消息。

Bash
<template>  

    <view>  

        <web-view src="http://192.168.1.1:3000/test.html" @message="handleMessage"></web-view>  

    </view>  

</template>  

<script>  

    export default {  

        methods: {  

            handleMessage(evt) {  

                console.log('接收到的消息:' + JSON.stringify(evt.detail.data));  

            }  

        }  

    }  

</script>

调用的时机

在引入上面的依赖文件后,需要在HTML中监听UniAppJSBridgeReady,事件触发后,

才能安全调用uni的API。

<script type="text/javascript" src="//js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.0.1.52.js"></script>

<script>

    document.querySelector('.btn-list').addEventListener('click', function(evt) {  

        var target = evt.target;  

        if (target.tagName === 'BUTTON') {  

            var action = target.getAttribute('data-action');  

            if(action === 'navigateTo') {  

				uni.postMessage({  

					data: {  

						action: 'postMessage'  

					}  

				});   

            }  

        }  

    }); 

</script>

上面代码的意思就是在html页面中点击按钮列表中的某个按钮,

触发了uni.postMessage接口,进而调用了vue页面methods中的handleMessage方法,

并将参数data传给了vue页面。

在vue页面中调用html页面的js函数

示例代码:

var currentWebview = this.$mp.page.$getAppWebview().children()[0];
currentWebview.evalJS("htmljsfuc('"+res.result+"')");

其中的htmljsfuc就是要在html页面中定义的js函数。

完整代码示例:

<template>

	<view>

		<web-view :src="url" @message="handleMessage" ref="webview"></web-view>

	</view>

</template>

<script>

export default {

	data() {

		return {

			url:'http://192.168.81.102:8021/test.html',

			

			webviewStyles: {

				progress: {

					color: '#FF3333'

				}

			}

		};

	},

	methods: {

		handleMessage(evt) {

			console.log('接收到的消息:' + JSON.stringify(evt.detail.data));

			var that=this;

			uni.scanCode({

			    success: function (res) {

			        console.log('条码类型:' + res.scanType);

			        console.log('条码内容:' + res.result);

                    //将扫码结果传给html页面

					var currentWebview = that.$mp.page.$getAppWebview().children()[0];

					currentWebview.evalJS("htmljsfuc('"+res.result+"')");

					

					uni.showModal({

						content: '扫码成功!\n'+'扫码结果:' + res.result,

						showCancel: false

					});

			    }

			});

		}

	}

}

</script>

<style></style>

相关推荐

249个Linux Shell脚本经典案例,拿来即用(附PDF)

作为一名Linux运维工程师,会写好的脚本不仅能提高工作效率,还能有更多的时间做自己的事。最近在网上冲浪的时候,发现大家对Shell脚本都有“心结”,要么觉得自己写出来不好看,要么根本无从下手。下...

分享一个实用脚本—centos7系统巡检

概述这周闲得慌,就根据需求写了差不多20个脚本(部分是之前分享过的做了一些改进),今天主要分享一个给平时运维人员用的centos7系统巡检的脚本,或者排查问题检查系统情况也可以用..实用脚本#!/bi...

Go 语言 Web 框架 Echo 系列:基础篇—搭建 Echo 开发环境

工欲善其事必先利其器。我们先搞定Echo环境。Go开发环境这个系列基于Go1.14.4,Linux系统。安装Go的方式有很多,可以在这里https://studygolang.com/...

连Shell的基本输出都不会,还写什么脚本?echo和printf命令总结

在Linux系统中使用echo命令和printf命令都可以实现信息的输出功能,下面我们分别看这两个命令的应用案例。echo1.使用echo命令创建一个脚本文件菜单功能描述:echo命...

在Linux中改变echo输出颜色的方法

技术背景在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色。例如,在脚本中使用不同颜色区分错误信息、警告信息和正常信...

Spring框架中applicationContext.xml和spring - servlet.xml的区别

技术背景在Spring框架里,applicationContext.xml和spring-servlet.xml是两个重要的配置文件。Spring允许在父子层次结构中定义多个上下文,这两个文件在不...

Tomcat服务器配置与优化:让Java应用飞得更高更远

Tomcat服务器配置与优化:让Java应用飞得更高更远Tomcat作为一款轻量级且功能强大的开源JavaServlet容器,无疑是许多中小型项目的首选服务器。然而,Tomcat的性能和稳定性并非天...

分享 5 个正则表达式的实际应用场景案例

转载说明:原创不易,未经授权,谢绝任何形式的转载在计算机编程的广泛领域中,某些技术具有改变我们如何处理和提取文本内容中信息的能力。在这些强大工具中,正则表达式成为每个开发者工具库中基本且不可或缺的组成...

最简洁详细的SSM框架整合(ssm框架详细介绍)

创建项目和SSM框架整合思路一、创建项目因为后面会配置springMVC,所以用IDEA的web骨架创建一个maven项目。创建项目目录如下,同时,项目需要的包和文件已手动创建好了:项目目录上图中,a...

使用JSP 2避免JSP文件中的Java代码

技术背景在早期的JSP开发中,使用脚本片段(<%%>、<%!%>、<%=%>)嵌入Java代码是常见做法,但这种方式存在诸多弊端。随着JSP2的出现,标签库...

微信安卓测试版8.0.28开发者更新内容公布

IT之家9月7日消息,微信安卓平台迎来了8.0.28测试版更新,相比上一次更新安装包体积有所减小,文件详细信息如下:微信安卓内测版8.0.28(ARM64)安装包文件大小254MB...

疯传阿里内网的SpringMVC笔记,被一个离职员工泄露,手慢无

一、简介1.介绍SpringMVC是实现MVC的轻量级Web框架,底层封装了servlet2.特点1.轻量级,简单易学2.约定优于配置3.与Spring兼容性好,无缝结合5.支持直接一个方法对一...

学习笔记之Struts2—工作原理图(struts1工作原理)

本文以Struts2的官方工作原理图作为主线讲解(参考部分书籍与视频)1.初始概念struts2是web.xml进行配置的一个过滤器,当web项目启动的时候,这个过滤器就会生效。2.web.xml&l...

Spring MVC工作流程及请求处理机制全解

SpringMVC工作流程及请求处理机制全解作为一个Java开发者,你一定对Spring框架有所耳闻。今天我们就来详细聊聊SpringMVC,这是Spring家族中最常用的Web层框架之一。Spr...

在Javaweb中实现发送简单邮件(java实现邮件收发)

前言当我们在一个网站中进行注册账户成功后,通常会收到一封来自该网站的邮件。邮件中显示我们刚刚申请的账户和密码以及一些其他的广告信息。在上一篇中用Java实现了发送qq邮件的功能,今天我们来实现一个这样...