Android : 如何在WebView显示的页面中查找内容

Author : Aoyousatuo Zhao

http://blog.sina.com.cn/aoyousatuo

WebViewAndroid提供的常用组件之一。它主要被设计用来显示html文件。正因为如此,所以在应用的开发过程中我们可以通过将需要显示的内容整理成html格式的 String从而轻松实现各种排版的效果。

虽然WebView组件封装了许多功能为应用的开发提供了便利,但是由于其开放的方法有限,有时候这种便利往往会给开发者造成很大的约束,例如开发者不能方便的控制WebView的显示起始行,不能得到相关的行信息等。所以说WebView方便大众的时候也难免会存在许多不足之处。

寡人在开发应用的过程中就遇到了一个难题:将html中指定的内容显示到当前屏幕中。怎么解决这个问题呢?寡人一遍遍地研究WebView开放的方法,始终没有得到很好的方案。白道不行,咱就来黑道,正史不行,咱就搜集野史,所谓条条大路通罗马嘛!于是寡人就到处搜寻WebView的源代码,希望通过非常规的办法(调用WebView类库中未开放的方法)有所起色。但是非常困难。并且显而易见,即使找到了,也是不安全的调用。这就像上海的楼倒倒,说不定什么时候就坍为平地。此路不但坎坷,前途未卜,而且有可能是断头路。

苍天啊!寡人虽然贵为天子但是有时候也很无奈,怎么办?寡人再次无奈地又审视了一下WebView开放的那几个可怜的方法。最后想了想,它们中最有希望救驾的只有findAllfindNext了。于是寡人想,如果能保证需要定位的内容的唯一性,通过搜寻需要定位的内容,不就把该内容显示到当前屏幕了吗?于是寡人大喜,打算着手一试,成功后举国欢庆。

但是,寡人一看帮助文档,这两个方法的说明为空,于是心中隐隐约约有一丝不安。果不其然,程序中一试,没有任何效果。寡人只好去咨询中西两位辅政大臣百度和谷歌了。终于……有了答案。下面就下诏天下,各位爱卿听仔细了:

先看辅政大臣给朕的说法:

Find is not a fully supported feature in webview.
However, try calling view.setFindIsUp(true) to get the match to draw; This function is hidden and subject to change, so your app may break in a future release.

WebView对搜寻查找功能不能充分地支持。然而,我们可以尝试着调用setFindIsUp方法来得到查询的结果,并且把它显示在当前屏幕(画出来)。这个方法被隐藏并且容易发生变化,所以你的应用或许在未来的版本中不能正常地使用它。

由此可见,要想findAll findNext起作用,必须调用setFindIsUp方法,但是此方法是内部函数,因此安全性不能保证,或许在未来某个版本就被和谐了。

尽管如此,这也是目前唯一较稳妥的一种解决方案。以后版本如果不能正常使用,说不定WebView会有更好的支持方法呢!

Example :

假设WebView已经装载了html内容,下面是搜寻部分的程序:

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

webView.findAll(“a”) ;

try{

Method m = WebView.class.getMethod(“setFindIsUp”, Boolean.TYPE) ;

m.invoke(webView, true) ;

}catch(Throwable ignored)

{

}

findNext的使用同理,这里不再累述。

总结

l      WebView findAll & findNext方法必须配合类内部方法setFindIsUp使用.

l      findAll效果是用空心框反白所有匹配的内容,用实心框反白第一个搜寻到的匹配内容,并且将其显示到当前屏幕。

l      如果需要取消搜寻的状态,可以调用clearMatches方法。

另外,如果从本文章中获益,请支持一下寡人。

Android : 如何在WebView显示的页面中查找内容的更多相关文章

  1. 用Seam实现:图片上传 + 保存到数据库 + 从数据库读出图片并显示到页面中

    上传图片并保存到数据库 seam给我们提供了 s:fileUpload 标签以完成文件上传功能.使用该标签时,要在web.xml中声明一个Seam的过滤器: <filter> <fi ...

  2. 解决方案:ppt打不开,显示发现文件中的内容有问题。可尝试修复此演示文稿

    ppt打不开,显示发现文件中的内容有问题.可尝试修复此演示文稿 故障截图如下: 解决方法: 主要是因为文件是网络下载的,office自动锁定了文件(默认不可编辑).在文件上右键-属性-解除锁定(最下面 ...

  3. ppt打不开,显示发现文件中的内容有问题。可尝试修复此演示文稿

    ppt打不开,显示发现文件中的内容有问题.可尝试修复此演示文稿 PPT发现要打开的文件有问题,修复后无法打开该文件 解决方法: 主要是因为文件是网络下载的,office自动锁定了文件(默认不可编辑). ...

  4. Java连接MySQL数据库。编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计。

    题目2:编写一个应用程序,在主类Test_4类中,通过JDBC访问stu数据库,显示t_student表中的内容(表结构见表1),显示效果自己设计.之后,可根据显示的内容进行某条记录的删除(以id为条 ...

  5. Android 之 用WebView显示网页

    WebView可以使得网页轻松的内嵌到 app 里,还可以直接跟js相互调用. WebView有两个方法:setWebChromeClient 和 setWebClient (1) setWebCli ...

  6. HTML5学习总结-10 Android 控件WebView显示网页

    WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient 1)setWebClient: ...

  7. 笔记-返回到前一个页面时显示前一个页面中ajax获取的数据

    笔记第一部分:http://www.cnblogs.com/zczhangcui/p/6869219.html 在第一部分遇到的问题是,用ajax获取了一系列列表信息后,拼接好html后插入到了原有页 ...

  8. ajax请求拿到多条数据拼接显示在页面中

    首先我们拿到的了一坨Json数据 如下 然后通过ajax请求拿到数据 在ajax的success方法中处理和使用数据: 其中包括: 用eval处理这种数据 var outStr = eval('('+ ...

  9. 让浏览器不再显示 https 页面中的 http 请求警报

    HTTPS 是 HTTP over Secure Socket Layer,以安全为目标的 HTTP 通道,所以在 HTTPS 承载的页面上不允许出现 http 请求,一旦出现就是提示或报错: Mix ...

随机推荐

  1. CRT远程连接server字符输出乱码解决一例

    CRT远程连接server字符输出乱码解决一例 环境: server:Centos 6.2 远端:win 7 CRT版本号:7.1.1 现象回想: 1.server端:中文字符显示正常,例如以下: 2 ...

  2. 大数据笔记13:Hadoop安装之Hadoop的配置安装

    1.准备Linux环境 1.0点击VMware快捷方式,右键打开文件所在位置 -> 双击vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip ...

  3. JavaScripts学习日记——DOM SAX JAXP DEMO4J XPath

    今日关键词: XML解析器 DOM SAX JAXP DEMO4J XPath XML解析器 1.解析器概述 什么是解析器 XML是保存数据的文件,XML中保存的数据也需要被程序读取然后使用.那么程序 ...

  4. DataGrid( 数据表格) 组件[6]

    本节课重点了解 EasyUI 中 DataGrid(数据表格)组件的使用方法,这个组件依赖于Panel(面板).Resizeable(调整大小).LinkButton(按钮).Pageination( ...

  5. (转)SQL Server 2008将数据导出为脚本 [SQL Server]

    之前我们要将一个表中的数据导出为脚本,那么只有在网上找一个导出数据的Script,然后运行就可以导出数据脚本了.现在在SQL Server 2008的Management Studio中增加了一个新特 ...

  6. IE9的window.showmodaldialog显示问题

    <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat=&quo ...

  7. eclipse中安装genymotion

    在eclipse中安装genymotion.安装genymotion需要先安装virtualbox.选择Help选项中的install new software 然后点击进去点击ADD,在locati ...

  8. 【socket.io研究】1.官网的一些相关说明,概述

    socket.io是什么? 官网的解释是一个实时的,基于事件的通讯框架,可以再各个平台上运行,关注于效率和速度. 在javascript,ios,android,java中都实现了,可以很好的实现实时 ...

  9. Markdown 入门教程

    Markdown 是一种轻量级的标记语言,轻到你甚至可以不叫他语言,因为 Markdown 很容易上手,就是简单地记住几个常用的标签用法就OK了,Markdown 有诸多好处:专注于文字,简单,高效. ...

  10. ecmascript 的一些发展新动向

    ========== ecmascript 的一些发展新动向 (e5a57b27 - initial commit) 更弱.更受限 严格模式禁止 arguments.callee - 可以 " ...