webView向android 传值

来源:互联网 发布:免费联系人恢复软件 编辑:程序博客网 时间:2024/05/29 03:36

最近做webview,遇到2种需求,一种是在自己服务器上的HTML中获取数据,另一种是通过自己服务器上的HTML中的超链接跳到另一个站点的HTML中,并获取数据。

于是,总结了2种通过webview获取网页上的数据的方式:

第一种:简单点的,直接通过js调Java,在调用方法的过程中将数据通过方法的参数传递给Android端,(前提:服务端有对应的faxun对象,而且调用的方法是showImages(String[] imgUrls))。

[java] view plain copy
class MyJavaScriptInterface {

    MyJavaScriptInterface() {      }      /**      * js调java,显示图片      *      * @param imgUrls      */      @JavascriptInterface      public 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格式的字符串)。

[java] view plain copy
class MyWebClient extends WebViewClient {
@Override
public 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 {
@JavascriptInterface
public 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());

0 0
原创粉丝点击