第一模块:
课程名称: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代码的字符串
第四模块: