WebView怎么获取Html元素的值?

html-css012

WebView怎么获取Html元素的值?,第1张

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

一般来说WebView 加载本地html很简单 如下图实现就好了

但是很坑的是 html不仅能命名为readme 命名是readme的就无法加载 换一个名称test就可以 了。真是罕见的bug