Android中WebView跟JavaScript之间传递json格式数据
在Android中WebView和JavaScript进行简单通信的基础上,实现了传递json格式数据功能,效果类似这样:
点击发起请求,得到Activity返回数据
只对MainActivity和demo.html代码进行了修改。首先声明了json格式字符串:
String jsonText = "{\"name\":\"vsp\",\"password\":\"vsp\"}";
DemoJavaScriptInterface类中,增加了方法clickOnAndroid,用来调用JavaScript中的方法,向Html页面传递数据:
final class DemoJavaScriptInterface {
DemoJavaScriptInterface() {
}/**
* This is not called on the UI thread. Post a runnable to invoke
* loadUrl on the UI thread.
*/
public void clickOnAndroid() {
mHandler.post(new Runnable() {
public void run() {
mWebView.loadUrl("javascript:wave("+jsonText+")");
}
});}
}
WebView中设置了WebChromeClient,这样就能在控制台打印JavaScript中alert等信息,用来调试JavaScript
mWebView.setWebChromeClient(new MyWebChromeClient());
MyWebChromeClient代码如下:
final class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(LOG_TAG, message);
result.confirm();
return true;
}
}
demo.html代码也很简单,就不做解释了。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script language="javascript">
/* This function is invoked by the activity */
function wave(jsonText) {
document.getElementById("output").innerHTML="用户姓名:"+jsonText.name;
alert("2");
}
</script>
</head><body>这是一个html页面 <br /><br /><br />
<div id="output" >用户姓名:</div><br /><br />
<input type="submit" value="发起请求" onclick="window.demo.clickOnAndroid();"/>
</body>
</html>
源码链接见:http://bigcateasymorse.googlecode.com/svn/trunk/webviewdemo1.1/
来自:http://bigcat.easymorse.com/?p=746