当前位置: 首页 > news >正文

Android WebView 与 H5 交互的一些总结

        Android 中,webview 绝对是使用最频繁的一个组件,涉及到很多的应用场景。如:新闻阅读、加载前端 H5 页面、与合作方的对接、加载本地静态资源等等。以下是我这几年在使用 webview 时的一些总结。
  • webView 的加载

webview 加载页面的方式主要有俩种,一种是加载HTTP || HTTPS 的H5 链接,一种是加载assets中大的本地HTML。

webView.loadUrl("https");//加载一个链接
webView.loadUrl("file:///android_asset/***.html");//加载静态文件
  • webView 设置 HEAD

有时候,为了一些安全考虑,会在加载 webview 时添加 head

Map<String, String> webViewHead = new HashMap<>();
webViewHead.put("Referer", HOST);
webView.loadUrl(url, webViewHead);
  • webView 设置 userAgent

同样,设置 userAgent 也是一种与外部 H5 交互时常用的一种安全方面的配置,一般我会先把想要设置的新 agent放在原来的基础上

String ua = webView.getSettings().getUserAgentString();
webView.getSettings().setUserAgentString(ua + webAgent);
  • webView 设置H5 调用原生时的标识

在与 H5 交互时,会涉及到 H5 与原生互相调用方法的情况,一般默认情况下,H5 会使用 android.去调用原生提供的方法,为了隐私和安全考虑,我们有时候会约定一个别的参数

webView.addJavascriptInterface(new WebAppInterface(),"约定好的标识");
  • webView 设置文件下载

如果H5 中有下载文件的一些操作,如果没有特别的要求,一般我们只需要简单配置就好

//webView 文件下载。直接跳转到外部浏览器进行下载
webView.setDownloadListener(new DownloadListener() {@Overridepublic void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {downloadByBrowser(url);}
});private void downloadByBrowser(String url) {Intent intent = new Intent(Intent.ACTION_VIEW);intent.addCategory(Intent.CATEGORY_BROWSABLE);intent.setData(Uri.parse(url));startActivity(intent);}
  • 其他一些细节

  1. 涉及到拍照,录像可能会需要原生对WebChromeClient进行一些特殊的处理这些根据实际情况查找资料并完善,没有一个统一的配置。需要注意的存储的权限,位置,回调。
  2. 我们会在等待加载的过程中配置过渡动画,这些在 WebViewClient中进行配置,同时可以配置一下证书问题,防止某些网页无法正常访问。
  3. 特殊情况下,可能会要求手机端网页使用PC 版效果,这个可以通过设置setUserAgentString来实现。
  4. 加载缓慢,卡顿等可以通过开启硬件加速来避免。
  5. 腾讯封装的 webview有利有弊,你得能接受你的 App 增加几十 M 的缓存。

http://www.mrgr.cn/news/47175.html

相关文章:

  • idea无法下载源码
  • HOW - Form 表单确认校验两种模式(以 Modal 场景为例)
  • java 中 main 方法使用 KafkaConsumer 拉取 kafka 消息如何禁止输出 debug 日志
  • 杭州铭师堂的云原生升级实践
  • 2025华数杯国际赛A题完整论文讲解(含每一问python代码+数据+可视化图)
  • ClickHouse-CPU、内存参数设置
  • @RequestMapping指定请求方式的用法
  • 【优选算法】(第三十二篇)
  • 请用python写一个小程序,把浏览器中打开的页面设置为深色模式
  • Solr简介
  • 如何高效部署SD-WAN及是否需要路由器?
  • windows 11 PE 制作及应用
  • 不同操作系统间conda环境迁移出现ResolvePackageNotFound错误
  • JavaScript 运算符全知道
  • 程序设计基础I-实验7 函数(函数题)
  • 当页面产生滚动,位置超过侧边栏的顶部阈值后,侧边栏变为固定定位
  • 适合高新技术企业的内外网文件交换系统
  • 算法题解:找不到百草枯
  • 【Linux】su 命令的运行原理以及su切换用户默认继承环境配置
  • 【测试】——测试管理工具禅道 介绍与使用
  • C# 两个进程/exe通讯方式 两个应用程序通讯方式
  • 【WKWebview】WKWebView Cookie 同步
  • 用GPT-4o打造LLM+OS(10+实用技能),代码开源,指令曝光,科技演示惊艳全场!
  • js面试题
  • 【面试宝典】深入Python高级:直戳痛点的题目演示(上)
  • Netty的组件