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

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

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

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

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

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

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

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

Find is not a fully supported feature in webview

However, try calling viewsetFindIsUp(true) to get the match to draw; This function is hidden and subject to change, so your app may break in a future releaseWebView对搜寻查找功能不能充分地支持。然而,我们可以尝试着调用

setFindIsUp

方法来得到查询的结果,并且把它显示在当前屏幕(画出来)。这个方法被隐藏并且容易发生变化,所以你的应用或许在未来的版本中不能正常地使用它。

由此可见,要想findAll和findNext起作用,必须调用

setFindIsUp

方法,但是此方法是内部函数,因此安全性不能保证,或许在未来某个版本就被和谐了。

尽管如此,这也是目前唯一较稳妥的一种解决方案。以后版本如果不能正常使用,说不定WebView会有更好的支持方法呢!Example :假设WebView已经装载了html内容,下面是搜寻部分的程序:

WebView webView = (WebView)findViewById(RidwebView) ;

webViewfindAll(a) ;try{Method m = WebViewclassgetMethod(setFindIsUp, BooleanTYPE) ;

minvoke(webView, true) ;

}catch(Throwable ignored){}findNext的使用同理,这里不再累述。总结:lWebView的findAll & findNext

方法必须配合类内部方法

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

如果需要取消搜寻的状态,可以调用

开了webview的作用如下:\r\n1、有效增大App的运存,减少由webview引起的内存泄露对主进程内存的占用。\r\n2、避免WebView的Crash影响App主进程的运行。\r\n3、拥有对WebView独立进程 *** 控权。\r\nAndroid内置webkit内核的高性能浏览器,而WebView则是在这个基础上进行封装后的一个控件,WebView直译网页视图,可以简单的看作一个可以嵌套到界面上的一个浏览器控件。Android是由Google公司和开放手机联盟领导并开发的一种基于Linux的自由且开放源代码的 *** 作系统,主要使用于移动设备。其最初由AndyRubin开发,后被Google于2005年8月收购。之后Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟,共同研发改良Android系统,完成开发后,Google以Apache开源许可证的授权方式,发布了Android的源代码。\r\n

最近项目中,用到了flutter中的webview加载带有echarts控件的html文件,但是发现图表一直无法显示,通过查询相关资料,分析apk包文件,知道了是由于flutter项目中的文件打包后的路径发生变化,造成找不到相关依赖,特此记录一下,使用下面这个方法便可以解析出Android和IOS打包后的apk中资源文件的实际位置。

例如,你的资源文件是在flutter项目的根目录下的 'assets/files/echart-piehtml',

那 'getAssetsPath('assets/files/echart-piehtml')'才是打包成apk后,资源文件的实际路径。

按照上面的 *** 作,你会发现在android设备上已经可以正常显示本地html页面了,但是IOS设备上还是一脸懵逼;不要慌,这块是由于webview_flutter本来就不支持加载本地文件,这时我们还需要修改下插件IOS部分的源码,FlutterWebViewm文件:

通过以上骚 *** 作,就可以实现webview_flutter在android和ios设备上加载本地html文件了。

最后:推荐一个插件,已经在官方的基础上进行了优化

webview_flutter_plus

webViewsetWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView webView, String url) { superonPageFinished(webView, url); Logi(TAG, findViewById(Ridmy_component)getWidth();); } });

试试这个 ,可以获取url,至于title和html可以通过直接查看源代码获得。

以上就是关于Android : 如何在WebView显示的页面中查找内容全部的内容,包括:Android : 如何在WebView显示的页面中查找内容、开了webview有什么用、Flutter WebView加载本地html的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10215320.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存