Android实现H5与Native交互的两种方式
发布时间 - 2026-01-10 22:00:01 点击率:次前言

大家都知道在Android WebView使用中,经常需要H5页面和Native页面进行交互,比如在网页上点击分享按钮,调用本地分享接口进行分享,分享成功后本地调用网页的JavaScript代码展示一条分享成功的消息。下面来看看一起看看两种实现方式是什么?
一、Url拦截的方式
重写ShouldOverrideUrl进行Url拦截,这种方式通过H5和Native协商好的Url格式来表明H5页面想要Native进行的操作,比如拨打电话,播放视频,查看某个用户的信息等操作,每种操作对应一种url格式,比如:
“/media/image/123”代表H5要调用Native查看id为123的图片; “/webapp/close/webview”表示H5需要Native关闭当前页面; “/webapp/patient_card/?patient_id=345”表示H5要调用Native显示用户345的详情页
可以通过url的parameter传递参数,并通过Uri.parse进行解析。返回true表示截断对该Url请求的响应。
protected WebViewClient mWebClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 添加tel链接响应
if (url.startsWith("tel:")) {
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));
startActivity(intent);
return true;
}
// 添加mp4播放相应
if (url.endsWith(".mp4")) {
viewVideo(url);
return true;
}
// 添加图片链接响应
if (Pattern.compile("/media/image").matcher(url).find()) {
viewImage(url);
return true;
}
// 关闭webview
if (Pattern.compile("/webapp/close/webview").matcher(url).find()) {
onBackPressed();
return true;
}
// 添加某个特殊url的响应
if(Pattern.compile("/webapp/patient_card/").matcher(url).find()) {
Uri uri = Uri.parse(url);
String patientId = uri.getQueryParameter("patient_id");
viewPatientInfo(patientId);
return true;
}
return super.shouldOverrideUrlLoading(view, url);
};
二、JavaScript注入方式
相比于Url拦截的方式,JavaScript注入的方式更加直接,Native将开放给H5调用的函数注入JavaScript,H5通过JavaScript调用Native函数完成操作。
1、获取webView的WebViewSettings设置,调用setJavaScriptEnabled开启JavaScript调用。
WebSettings settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true);
2、将需要暴露给JavaScript的函数前面添加@JavascriptInterface注解,只有添加了该注解的函数才能被JavaScript调用。
public class WebAppInterface {
@JavascriptInterface
public boolean method1(String param1, String param2) {
// do something
}
@JavascriptInterface
public boolean method2(String param1, String param2) {
// do something
}
}
3、通过WebView的addJavascriptInterface方法,将Native方法所在的class注入到JavaScript中。该函数的第一个参数是注入的Native对象,第二个参数是该对象的名字,JavaScript通过改名字访问该对象
WebView webView = (WebView) findViewById(R.id.webview); webView.addJavascriptInterface(new WebAppInterface(), "InterfaceName");
4、这样,H5页面就可以通过下面的JavaScript调用Native的函数了
<script type="text/javascript">
function method1(param1, param2) {
InterfaceName.method1(param1, param2);
}
</script>
Native调用JavaScript
Native调用JavaScript函数的方法比较简单,通过loadUrl函数进行:
// 无参数调用
contentWebView.loadUrl("javascript:javacalljs()");
// 有参数调用
mWebView.loadUrl("javascript:test('" + param+ "')"); // param是js的函数test()的参数
总结
以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流。
# h5
# native
# 交互
# android
# h5和native交互
# Android的WebView与H5前端JS代码交互的实例代码
# Android webview加载H5方法详细介绍
# Android Studio打包H5网址页面
# 封装成APK
# 移动端H5唤起APP的写法实例(IOS、android)
# Android与H5交互产生Script Error踩坑解决
# 第一个
# 大家都
# 两种
# 可以通过
# 第二个
# 来看看
# 重写
# 这篇文章
# 如在
# 就可以
# 拨打电话
# 详情页
# 改名字
# 有疑问
# close
# webview
# parameter
# webapp
# patient_id
# Uri
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
Laravel如何处理表单验证?(Requests代码示例)
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
如何制作一个表白网站视频,关于勇敢表白的小标题?
昵图网官网入口 昵图网素材平台官方入口
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
Laravel如何实现事件和监听器?(Event & Listener实战)
如何在 React 中条件性地遍历数组并渲染元素
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
如何挑选优质建站一级代理提升网站排名?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
用yum安装MySQLdb模块的步骤方法
郑州企业网站制作公司,郑州招聘网站有哪些?
Python自动化办公教程_ExcelWordPDF批量处理案例
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
Laravel如何保护应用免受CSRF攻击?(原理和示例)
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
如何在香港免费服务器上快速搭建网站?
三星、SK海力士获美批准:可向中国出口芯片制造设备
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
如何在建站宝盒中设置产品搜索功能?
如何在不使用负向后查找的情况下匹配特定条件前的换行符
如何在IIS中新建站点并配置端口与IP地址?
html如何与html链接_实现多个HTML页面互相链接【互相】
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
如何在万网自助建站中设置域名及备案?
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何在IIS7上新建站点并设置安全权限?
Python图片处理进阶教程_Pillow滤镜与图像增强
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
android nfc常用标签读取总结
详解vue.js组件化开发实践

