如何用webview.获取html元素,WebView怎么获取Html元素的值?

76941d7ee0024a042dbbd54adeb4f958.png

繁华开满天机

只能通过JavaScript来获取, 然后通过JS获取, 然后通过JavaScriptInterface来传递给Java层。做webview,遇到2种需求,一种是在自己服务器上的HTML中获取数据,另一种是通过自己服务器上的HTML中的超链接跳到另一个站点的HTML中,并获取数据。于是,总结了2种通过webview获取网页上的数据的方式:第一种:简单点的,直接通过js调java,在调用方法的过程中将数据通过方法的参数传递给Android端,(前提:服务端有对应的faxun对象,而且调用的方法是showImages(String[] imgUrls))。class MyJavaScriptInterface {MyJavaScriptInterface() {}/*** js调java,显示图片** @param imgUrls*/@JavascriptInterfacepublic void showImages(String[] imgUrls) {LogUtils.i(TAG, "imgUrls = " + imgUrls[0]);NewsDetailWebviewActivity.this.imgUrls = imgUrls;}}...webView.addJavascriptInterface(new MyJavaScriptInterface(), "faxun");第二种:有点复杂,通过webview注册一个本地接口后,然后通过java调js,拿到document对象后,解析HTML标签,然后数据会通过本地接口中的回调方法传递给Android端,(前提:HTML页面中的meta标签中有对应的reply_info名称和content属性,数据是封装在content里面的json格式的字符串)。class MyWebClient extends WebViewClient {@Overridepublic void onPageFinished(WebView view, String url) {view.loadUrl("javascript:window.getShareData.OnGetShareData("+ "document.querySelector('meta[name=\"reply_info\"]').getAttribute('content')" + ");");super.onPageFinished(view, url);}}private class GetShareDataInterface {@JavascriptInterfacepublic void OnGetShareData(String shareData) {if (null != shareData) {try {JSONObject shareJson = new JSONObject(shareData);title = shareJson.optString("title");description = shareJson.optString("description");imageUrl = shareJson.optString("imageUrl");} catch (JSONException e) {e.printStackTrace();}}}}.....webView.setWebViewClient(new MyWebClient());其实,如果是普通的需求,两种方式都可以解决问题,但是如果是有些HTML没有做js调java,只是个普通的HTML,并且需要获取页面上的数据时,只能通过第二种方式来获取HTML上的数据了,比如获取HTML上的title等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值