第一模块:
课程名称:android与webView的js交互
章节:1-1~4-1
讲师名称:西门老舅
第二模块:
1. webView调用java方法
允许webView加载js
WebView.getSettings().setJavaScriptEnabled(true);
编写js接口类
给webView添加js接口
WebView.addJavascriptInterface(obj,name);
注意:js交互中常见的一些错误
1. 在js接口的回调方法中throw exception
2. Web端不进行对象存在判断
3. 传递参数类型不一致(尤其是数组和对象)
4. 字符串类型参数为空时传递undefined
第三模块:
webView.addJavaScriptInterface(new Object(){xxx}, "xxx");
// 可以使用WebView控件执行JavaScript脚本,并且可以在JavaScript中执行Java代码。要想让WebView控件执行JavaScript,需要调用WebSettings.setJavaScriptEnabled方法:
WebView webView = (WebView)findViewById(R.id.webview)
WebSettings webSettings = webView.getSettings()
//设置WebView支持JavaScript
webSettings.setJavaScriptEnabled(true)
webView.setWebChromeClient(new WebChromeClient())
// JavaScript调用Java方法需要使用WebView.addJavascriptInterface方法设置JavaScript调用的Java方法:
webView.addJavascriptInterface(new Object()
{
public String process(String value)
{
return result;
}}, "demo");<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>测试</title>
<script type="text/javascript">
function test(){
client.test()
}
</script>
</head>
<body>
<br />
<button onclick="test()">test</button>
</body>
</html>
public class WebActivity extends Activity{
ProgressBar mProgressBar;
WebView mWebView;
String mUrl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web);
mWebView = (WebView) findViewById(R.id.web_view);
mProgressBar = (ProgressBar) findViewById(R.id.loading_progress);
doWebViewSetting();
// 加载网页
loadUrl("http://172.10.1.2:8080/test");
}
private void doWebViewSetting(){
// 设置WebClient(可不要)
mWebView.setWebViewClient(new MyWebViewClient());
// 支持js(必要)
mWebView.getSettings().setJavaScriptEnabled(true);
// 添加js对象(必要)
mWebView.addJavascriptInterface(new JsOperation(this), "client");
}
private void loadUrl(String url) {
mUrl = url;
mProgressBar.setVisibility(View.VISIBLE);
mWebView.loadUrl(url);
}
class MyWebViewClient extends WebViewClient{
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mProgressBar.setVisibility(View.GONE);
}
}
class JsOperation {
Activity mActivity;
public JsOperation(Activity activity) {
mActivity = activity;
}
// 测试方法 @javascriptInterface
public void test() {
Toast.makeText(mActivity,"test",Toast.LENGTH_SHORT).show();
}
}
// Android调用js方法
使用loadUrl方法调用javascript
WebView.loadUrl(javascript:jsString)
jsString是要调用的js代码的字符串第四模块: