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

如何从android的webview 取得页面上的数据

要从Android的WebView中获取页面上的数据,通常有几种常见的方法:

JavaScript Interface:通过JavaScript和Android Interface进行通信。这种方法允许你在JavaScript中调用Android的方法,反之亦然。

Evaluate JavaScript:直接从WebView中执行JavaScript代码,并获取执行结果。

下面详细说明这两种方法:

方法一:使用JavaScript Interface
创建一个Java Interface:

先创建继承自Object的类,并添加您希望在JavaScript中调用的方法。在方法上添加@JavascriptInterface注解。

public class MyJavaScriptInterface {
@JavascriptInterface
public void getDataFromWeb(String data) {
// 处理从Web传来的数据
Log.d(“WebData”, data);
}
}
设置JavaScript Interface:

在你的Activity或Fragment中,通过addJavascriptInterface方法将该接口添加到WebView中。

WebView webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true); // 启用JavaScript
webView.addJavascriptInterface(new MyJavaScriptInterface(), “AndroidInterface”);
调用Android Interface:

在网页的JavaScript中,通过window.AndroidInterface.getDataFromWeb(data)来调用Android的方法。

方法二:使用Evaluate JavaScript
这种方法允许直接从WebView中执行JavaScript代码,并获取执行结果。

在WebView设置中启用JavaScript:

WebView webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true); // 启用JavaScript
使用evaluateJavascript方法:

你可以通过evaluateJavascript方法直接从WebView中执行JavaScript代码,并获取结果。

webView.evaluateJavascript(
“(function() { return document.body.textContent; })();”,
new ValueCallback() {
@Override
public void onReceiveValue(String value) {
// value 是 JavaScript 执行结果
Log.d(“WebData”, value);
}
});
总结
如果你需要不断地与网页交互并获取数据,使用JavaScript Interface可能是更好的选择。如果只需要获取某些特定的数据,evaluateJavascript可能是更简单、更直接的方法。

以上方法都需要确保WebView已经加载完页面,可以添加一个WebViewClient并在onPageFinished方法中执行这些操作:

webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 在这里调用evaluateJavascript或者操作JavaScript Interface
}
});

http://www.lryc.cn/news/489305.html

相关文章:

  • VTK知识学习(12)- 读取PNG图像
  • Springboot项目搭建(3)-更改用户信息与文件上传
  • Docker1:认识docker、在Linux中安装docker
  • python成绩分级 2024年6月python二级真题 青少年编程电子学会编程等级考试python二级真题解析
  • android 如何获取当前 Activity 的类名和包名
  • Spring Boot 项目 myblog 整理
  • uniapp 城市选择插件
  • 测试工程师如何在面试中脱颖而出
  • Mesh路由组网
  • LeetCode131:分割回文串
  • 详细解析 devmem 命令:在 Linux 系统中直接访问内存的利器
  • [Docker-显示所有容器IP] 显示docker-compose.yml中所有容器IP的方法
  • 【前端知识】nodejs项目配置package.json深入解读
  • XGBOOST算法Python实现(保姆级)
  • JDK、MAVEN与IDEA的安装与配置
  • 输出比较简介
  • 什么是反向 DNS 查找以及它的作用是什么?
  • 集群聊天服务器(13)redis环境安装和发布订阅命令
  • [ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
  • Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装
  • DimensionX 部署笔记
  • django从入门到精通(五)——表单与模型
  • C语言Day 03 学习总结
  • kafka中是如何快速定位到一个offset的
  • 视频对接rtsp协议学习
  • 【系统架构设计师】真题论文: 论企业信息化规划的实施与应用(包括解题思路和素材)
  • 【ARM Coresight OpenOCD 系列 6.1 -- JTAG Commands】
  • 开源许可协议
  • 241121学习日志——[CSDIY] [InternStudio] 大模型训练营 [11]
  • 跟千里马学框架 遇到的坑