android - 从 webview 中获取文本

2023-11-23

在我的应用程序中,我显示 epub HTML 文件webview using EPUBLIB。 我的问题是我想为我的 epub 阅读器使用书签功能。为此我想从中获取文本webview它显示我的 epub 的 HTML 文件中的页面,然后在我的书签活动中使用该文本向用户显示他们已添加书签的内容。 我怎样才能实现这个目标?


从网络视图获取纯文本内容相当困难。基本上,android 类不提供它,但是JavaScript 确实,Android 提供了一种让 javascript 将信息传递回代码的方法。

在详细介绍之前,请注意,如果您的 html 结构很简单,您最好手动解析数据.

也就是说,这就是你要做的:

  1. 启用 JavaScript
  2. 添加您自己的 javascript 接口类,允许 javascript 与您的 Android 代码进行通信
  3. 注册您自己的网页视图客户端,覆盖页面完成插入一些 javascript
  4. 在 javascript 中,获取元素.innerText标签,并将其传递到您的 javascript 界面。

为了澄清这一点,我将在下面发布一个工作(但非常粗略)的代码示例。它在顶部显示一个 web 视图,在底部显示一个带有基于文本的内容的文本视图。

package test.android.webview;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

public class WebviewTest2Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        WebView webView = (WebView) findViewById(R.id.webView);
        TextView contentView = (TextView) findViewById(R.id.contentView);

        /* An instance of this class will be registered as a JavaScript interface */ 
        class MyJavaScriptInterface 
        { 
            private TextView contentView;

            public MyJavaScriptInterface(TextView aContentView)
            {
                contentView = aContentView;
            }

            @SuppressWarnings("unused") 

            public void processContent(String aContent) 
            { 
                final String content = aContent;
                contentView.post(new Runnable() 
                {    
                    public void run() 
                    {          
                        contentView.setText(content);        
                    }     
                });
            } 
        } 

        webView.getSettings().setJavaScriptEnabled(true); 
        webView.addJavascriptInterface(new MyJavaScriptInterface(contentView), "INTERFACE"); 
        webView.setWebViewClient(new WebViewClient() { 
            @Override 
            public void onPageFinished(WebView view, String url) 
            { 
                view.loadUrl("javascript:window.INTERFACE.processContent(document.getElementsByTagName('body')[0].innerText);"); 
            } 
        }); 

        webView.loadUrl("http://shinyhammer.blogspot.com");
    }
}

使用以下 main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_weight="0.5" />

    <TextView
        android:id="@+id/contentView"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:layout_weight="0.5" />


</LinearLayout>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android - 从 webview 中获取文本 的相关文章

  • 以 Gif 形式在 Android 上以编程方式共享 WhatsApp 视频

    我如何将 mp4 视频文件转换为 WhatsApp gif 文件 在应用程序 UI 中简单显示为 gif 但内部是特定的 mp4 格式 以在 android 共享意图中使用 并被 Whatsapp 聊天应用程序识别为此类媒体 我搜索了很多
  • Android 动画闪烁

    我一直在搜索关于这个主题的尽可能多的线程 我可以在处理动画监听器时在 Android 2 2 中出现的闪烁中找到这些线程 但我无法完全解决我的问题 我得到的是一个 LinearLayout 弹出框 用户触摸它可以向下移动大约 100 像素
  • Android 如何使用 OkHttp 从 Callback 获取响应字符串?

    这是我的代码 OkHttpClient okHttpClient new OkHttpClient Request request new Request Builder url http publicobject com hellowor
  • 使用服务时应用程序终止时音乐暂停

    我正在使用一个Service类在后台播放音乐 当我在顶部显示通知栏时 我的应用程序出现问题 当我终止该应用程序时 音乐停止约 1 秒 然后再次开始 我不知道出了什么问题 我正在关注this https www simplifiedcodin
  • 如何通过单击颤动推送通知来打开特定屏幕

    我试图在单击推送通知时打开特定屏幕 我的有效负载如下所示 var payload notification title notificationTitle body notificationMessage click action scre
  • 如何在不使用adb shell的情况下获取android应用程序的pid?

    如何在不使用 adb shell 的情况下获取 Android 应用程序 pid 有没有API可以获取pid 任何帮助将不胜感激 由于每个应用程序都有自己的进程ID 因此可以通过 int pid android os Process myP
  • Android Volley 服务器错误

    I am posting data all strings to varchar variables in server but i am getting volley server error or badnetwork performa
  • 如何使用baseadapter自定义listview

    我想创建一个定制的ListView像这样 我想我必须使用BaseAdapter但我对此一无所知 主要 xml
  • 通过 Wi-Fi 的 ADB 在一台 PC 上非常慢,但在另一台 PC 上则非常慢

    我正在尝试学习如何为 Android 进行开发 并且我希望能够在我的设备而不是模拟器上进行测试 我手机上的 USB 端口变得非常松动 我不想在使用它进行测试的数十个小时中弄乱它 我在桌面上通过 Wi Fi 启用了 ADB 它运行得非常完美
  • cordova:从 url 下载到 android 下载文件夹

    在开始之前 我尝试了以下堆栈溢出的答案 使用phonegap将文件下载到ios android下载文件夹 https stackoverflow com questions 21375624 download file to downloa
  • Android:我需要关闭 Cursor 对象吗?

    在我的数据库适配器类中 我有很多这样的方法 public long getContactId final String phoneNumber throws SQLException final Cursor cur mDb rawQuer
  • 在发布我的应用程序之前在 play.google 上获取我的应用程序的链接

    我想使用 facebook api 分享我的应用程序的链接 play google 上的链接 但在将应用程序发布到市场之前我必须拥有它才能将其放入我的代码中 除了发布后立即更新我的应用程序之外 还有其他解决方案吗 用这个 https pla
  • Robolectric 3.0 不适用于 AppCompat 21+

    升级到 AppCompat 21 后 我们的许多 Robolectric 测试都失败了 Toolbar 和 AppCompatDelegate 似乎存在问题 我尝试了 support v4 appcompat 22 2 1 和 appcom
  • Android 背景 + 文本 + 按钮图标

    我想要一个图像设置为文本的背景 并在文本的左侧设置一个图标 在iPhone中非常简单 但不知道如何在Android上做到这一点 调整按钮的大小并保持图标 文本的位置和距离正确 iPhone 安卓我有这个 xml代码是
  • 如何检测屏幕何时关闭?

    是否可以检测屏幕何时关闭并捕获它 我想在 Android 的全局设置中将计时器设置为 15 秒 我正在尝试查找一些如何捕获唤醒锁定模式的信息 只需注册您的应用程序即可执行操作Intent ACTION SCREEN OFF https de
  • 横向模式下视频视图不是全屏

    我正在使用用 xml 设计的视频视图 该视频在纵向模式下为全屏 但当切换到横向模式时 它会左对齐 并且宽度和高度都会换行 而不是全屏 我参考了这些 但仍然没有解决这个问题 全屏视频视图未居中 https stackoverflow com
  • 如何从下到上连续移动图像?

    我一直在研究这个例子http obviam net index php a very basic the game loop for android http obviam net index php a very basic the ga
  • recyclerview 未连接适配器;跳过布局

    刚刚实施RecyclerView在我的代码中 替换ListView 一切正常 显示数据 但正在记录错误消息 15 25 53 476 E RecyclerView No adapter attached skipping layout 15
  • 是否可以从 Android Studio 恢复被覆盖的文件?

    由于错误 我覆盖了我的两个来自 android studio 的具有相同名称的项目 并且今天我已经取消了该操作 我尝试打开主项目 但发现其中没有 Java 类 只有布局文件 在我覆盖的第二个项目中 文件存在巨大混乱 并尝试使用 Androi
  • 了解 FTS3/FTS4:什么是虚拟表并从中搜索具有可搜索的非虚拟表?

    阅读 SQLite3 的 FTS3 FTS4 文档的第一部分后 我现在感到非常困惑 我感到困惑的原因是散布在网络上的示例 我相信它没有涵盖所有可能的用例 另一个原因是我目前所处的情况 话虽如此 我有一个名为 Note 的表 其中包含两个类型

随机推荐

  • 理解和可视化递归

    我在这里提到了几个有关递归的问题 但我无法理解递归如何解决这个特定问题 Python中获取字符串中所有字符组合的递归程序 st def combi prefix s if len s 0 return else st append pref
  • 是否可以在 Twitter Bootstrap 中的模态中使用“行”和“跨度”?

    我正在尝试使用 Twitter Bootstrap 中的模式来实现联系表单 理想情况下 我希望前两个字段集彼此相邻对齐 第三个字段集 包含文本区域和提交按钮 占据模式的整个宽度 我尝试使用行和跨度来使它们很好地发挥作用 但不确定如何进行此操
  • 是否应该在第二个 lambda 中重用 LINQ lambda 表达式参数?

    下列的这个问题我想知道lambda参数表达式实例的重用应该被认为是好还是坏 我有时会得到一个完整的 LINQ 表达式树 其中相同的 lambda 参数实例在第二个非嵌套 lambda 中正确使用 class Person public in
  • PHP 中 mb_detect_order() 的奇怪行为

    我想检测一些文本的编码 使用 PHP 为此 我使用 mb detect encoding 函数 问题是 如果我使用 mb detect order 函数更改可能编码的顺序 该函数会返回不同的结果 考虑下面的例子 html lt lt lt
  • Chrome 扩展:下载/导出“即时”创建的内容

    我需要让用户下载从扩展中包含的某些数据动态创建的文件 但我不想在服务器端执行此操作 作为一个现实世界的例子 有一个变量包含文本 hello world 我希望用户能够下载 创建 TXT包含此类文本的文件 是否可以 2010年10月30日编辑
  • 无法安装node-sass

    我正在尝试安装node sass 但它不让我安装 我尝试过更新npm 我把这个放进去 sudo npm install g 节点 sass 我得到了这个 从错误之前的一行开始 gyp verb build dir attempting to
  • 无法使用 Sheets API 访问公共工作表

    一年多以来 我一直在网页上使用 Google Sheets APIv4 来显示公开共享的 Google 电子表格中的数据 尽管我们这边没有任何改变 但 Sheets API 现在返回 403 权限被拒绝错误 我尝试访问的工作表是我拥有的工作
  • Lucene:如何获取文档的分数

    我想输出文档的分数 我为此编写的代码是 IndexReader reader IndexReader open FSDirectory open indexDir IndexSearcher searcher new IndexSearch
  • Github远程推送包大小超出

    我是 Git 新手 有一个相当大的项目 我想将其推送到 Github 上的远程存储库 存储库 B 原始项目也在 Github 上 但来自不同的存储库 存储库 A 我必须先对 Repo A 中的文件进行一些更改 然后才能在 Repo B 上设
  • 如何连接到 AVD

    我正在尝试编写自己的 Android http 服务器 没问题 但我的 AVD 有问题 我不想每次想要测试更改时都将应用程序下载到手机上 我想通过 AVD 连接到我的应用程序 为了获取IP地址 我使用这个函数 private String
  • 继承字典的序列化类不是序列化属性

    我有一个继承自 Dictionary 的类 并且有几个属性 当我序列化时 它仅序列化字典而不序列化属性 如果我有一个包含属性的有效负载 它会反序列化为它们 如何让它序列化我的对象 包括属性 public class Maintenance
  • 使用时钟滴答作为随机数种子

    我使用当前时钟滴答作为随机数生成的种子 随机数用于伪 GUID 并且在我的数据库中进行检查将确保它在返回之前不存在 平均而言 在进程的生命周期内 该方法将被连续调用大约 10k 次 我担心的是 可能会连续生成相同的号码 从而导致对我的数据库
  • 如何获取 clojure 数组映射来维护 assoc 之后的插入顺序?

    我有一个array map我就是assoc将一些值写入其中 达到一定大小后 返回值是PersistentHashMap而不是原来的PersistentArrayMap 我在一些网站上读到过有关此行为的信息 有没有办法强制插入顺序即使在ass
  • 在 JavaScript 变量名中使用冒号(例如 a:b:c)

    我刚刚注意到我可以在 javascript 中执行以下操作 a b c d happy days a b c function text alert text 然而我却做不到 var a b c d happy days or var my
  • virtualenv v16.7.2 powershell 激活脚本:“您必须‘来源’此脚本:PS> . .\ENV\Scripts\activate”错误

    问题 python v 3 7 4 上的最新版本 virtualenv 16 7 2 为 activate ps1 脚本添加了 4 行 在 Windows10 powerhsell 上运行时会出现错误 You must source thi
  • 在Django中如何获取文件上传后的绝对路径?

    我想将文件上传到我的数据库 上传后导入它并最终将数据导出到我的数据库中 我的上传工作正常 但我不确定如何在上传文件后获取文件的绝对路径 我可以打印出文档的名称 但如果上传相同的文档名称 则会附加该名称 但如果我调用 仍然显示原始文件名for
  • Zeppelin - 无法使用 %sql 查询我在 pyspark 注册的表

    我是 Spark zeppelin 的新手 我想完成一个简单的练习 其中我将把 csv 文件从 pandas 转换为 Spark 数据框架 然后注册该表以使用 sql 查询它并使用 Zeppelin 对其进行可视化 但我似乎在最后一步失败了
  • 如何使用 Java 的 Scanner 类和正则表达式对输入进行标记?

    出于我自己的目的 我尝试在 Java 中构建一个分词器 我可以在其中定义常规语法并让它基于该语法对输入进行分词 StringTokenizer 类已被弃用 我在 Scanner 中发现了几个函数暗示我想要做什么 但还没有运气 有人知道解决这
  • 防止 Javadoc gradle 构建失败

    我正在尝试将我的库项目上传到 jCenter 当我跑步时gradlew install我收到错误 任务 myLibraryProject javadoc 执行失败 我将以下代码添加到我的库项目中 task androidJavadocs t
  • android - 从 webview 中获取文本

    在我的应用程序中 我显示 epub HTML 文件webview using EPUBLIB 我的问题是我想为我的 epub 阅读器使用书签功能 为此我想从中获取文本webview它显示我的 epub 的 HTML 文件中的页面 然后在我的