Android中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true

Android(Java)与JavaScript(HTML)交互有四种情况:

1) Android(Java)调用HTML中js代码

2) Android(Java)调用HTML中js代码(带参数)

3) HTML中js调用Android(Java)代码

4) HTML中js调用Android(Java)代码(带参数)

下面示例总结这四种情况,直接上干货:

1) Android(Java)

[java] view plain copy print ?
  1. privatevoidshowWebView(){//webView与js交互代码
  2. try{
  3. mWebView=newWebView(this);
  4. setContentView(mWebView);
  5. mWebView.requestFocus();
  6. mWebView.setWebChromeClient(newWebChromeClient(){
  7. @Override
  8. publicvoidonProgressChanged(WebViewview,intprogress){
  9. JSAndroidActivity.this.setTitle("Loading...");
  10. JSAndroidActivity.this.setProgress(progress);
  11. if(progress>=80){
  12. JSAndroidActivity.this.setTitle("JsAndroidTest");
  13. }
  14. }
  15. });
  16. mWebView.setOnKeyListener(newView.OnKeyListener(){//webviewcangoback
  17. @Override
  18. publicbooleanonKey(Viewv,intkeyCode,KeyEventevent){
  19. if(keyCode==KeyEvent.KEYCODE_BACK&&mWebView.canGoBack()){
  20. mWebView.goBack();
  21. returntrue;
  22. }
  23. returnfalse;
  24. }
  25. });
  26. WebSettingswebSettings=mWebView.getSettings();
  27. webSettings.setJavaScriptEnabled(true);
  28. webSettings.setDefaultTextEncodingName("utf-8");
  29. mWebView.addJavascriptInterface(getHtmlObject(),"jsObj");
  30. mWebView.loadUrl("http://192.168.1.121:8080/jsandroid/index.html");
  31. }catch(Exceptione){
  32. e.printStackTrace();
  33. }
  34. }
  35. privateObjectgetHtmlObject(){
  36. ObjectinsertObj=newObject(){
  37. publicStringHtmlcallJava(){
  38. return"HtmlcallJava";
  39. }
  40. publicStringHtmlcallJava2(finalStringparam){
  41. return"HtmlcallJava:"+param;
  42. }
  43. publicvoidJavacallHtml(){
  44. runOnUiThread(newRunnable(){
  45. @Override
  46. publicvoidrun(){
  47. mWebView.loadUrl("javascript:showFromHtml()");
  48. Toast.makeText(JSAndroidActivity.this,"clickBtn",Toast.LENGTH_SHORT).show();
  49. }
  50. });
  51. }
  52. publicvoidJavacallHtml2(){
  53. runOnUiThread(newRunnable(){
  54. @Override
  55. publicvoidrun(){
  56. mWebView.loadUrl("javascript:showFromHtml2('IT-homerblog')");
  57. Toast.makeText(JSAndroidActivity.this,"clickBtn2",Toast.LENGTH_SHORT).show();
  58. }
  59. });
  60. }
  61. };
  62. returninsertObj;
  63. }



2) js(HTML)

[html] view plain copy print ?
  1. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <!--savedfromurl=(0032)http://localhost:8080/jsandroid/-->
  3. <htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
  4. <metahttp-equiv="Expires"content="0">
  5. <metahttp-equiv="Pragma"content="no-cache">
  6. <metahttp-equiv="Cache-Control"content="no-store,no-cache">
  7. <metaname="Handheldfriendly"content="true">
  8. <metaname="viewport"content="width=100%;initial-scale=1.0;user-scalable=yes">
  9. <metaname="robots"content="all">
  10. <metaname="keywords"contect="doodle,mobile,doodlemobile,game,games">
  11. <metaname="description"content="MakePeople'sMobileLifeMoreConnectedThroughGames.">
  12. <title>jsandroid_test</title>
  13. <scripttype="text/javascript"language="javascript">
  14. functionshowHtmlcallJava(){
  15. varstr=window.jsObj.HtmlcallJava();
  16. alert(str);
  17. }
  18. functionshowHtmlcallJava2(){
  19. varstr=window.jsObj.HtmlcallJava2("IT-homerblog");
  20. alert(str);
  21. }
  22. functionshowFromHtml(){
  23. document.getElementById("id_input").value="JavacallHtml";
  24. }
  25. functionshowFromHtml2(param){
  26. document.getElementById("id_input2").value="JavacallHtml:"+param;
  27. }
  28. </script>
  29. </head>
  30. <body>
  31. helloIT-homer
  32. <br>
  33. <br>
  34. <br>
  35. <inputtype="button"value="HtmlcallJava"onclick="showHtmlcallJava()"/>
  36. <br>
  37. <inputtype="button"value="HtmlcallJava2"onclick="showHtmlcallJava2()"/>
  38. <br>
  39. <br>
  40. <br>
  41. <br>
  42. <inputid="id_input"style="width:90%"type="text"value="null"/>
  43. <br>
  44. <inputtype="button"value="JavacallHtml"onclick="window.jsObj.JavacallHtml()"/>
  45. <br>
  46. <br>
  47. <br>
  48. <inputid="id_input2"style="width:90%"type="text"value="null"/>
  49. <br>
  50. <inputtype="button"value="JavacallHtml2"onclick="window.jsObj.JavacallHtml2()"/>
  51. </body>
  52. </html>



3) 运行结果:

HTML---Android与js交互实例_第1张图片

4) 代码解析:

(1) 允许Android执行js脚本设置

Android(Java)与js(HTML)交互的接口函数是: mWebView.addJavascriptInterface(getHtmlObject(), "jsObj"); // jsObj 为桥连对象

Android容许执行js脚本需要设置:webSettings.setJavaScriptEnabled(true);

(2) js(HTML)访问Android(Java)代码

js(HTML)访问Android(Java)端代码是通过jsObj对象实现的,调用jsObj对象中的函数,如:window.jsObj.HtmlcallJava()

(3) Android(Java)访问js(HTML)代码

Android(Java)访问js(HTML)端代码是通过loadUrl函数实现的,访问格式如:mWebView.loadUrl("javascript: showFromHtml()");

说明:

1) Android访问url网址,需在AndroidManifest.xml文件,配置容许访问网络的权限:
<uses-permission android:name="android.permission.INTERNET" />

2) Android(Java)调用js(HTML)时,使用的mWebView.loadUrl("javascript: showFromHtml()");函数需在UI线程运行,因为mWebView为UI控件

[java] view plain copy print ?
  1. publicvoidJavacallHtml(){
  2. runOnUiThread(newRunnable(){
  3. @Override
  4. publicvoidrun(){
  5. mWebView.loadUrl("javascript:showFromHtml()");
  6. Toast.makeText(JSAndroidActivity.this,"clickBtn",Toast.LENGTH_SHORT).show();
  7. }
  8. });
  9. }

源码下载

更多相关文章

  1. C语言函数以及函数的使用
  2. Android基础 | 控件基础 | ImageView用法
  3. 【Android 开发】: Android 消息处理机制之三: Handler 中 sendM
  4. 高级控件之网格视图(GridView)
  5. 获取Android SDK 源代码并在Eclipse中关联查看的方法
  6. 如何调试跟踪Android源代码
  7. Android应用程序启动过程源代码分析(1)

随机推荐

  1. Android开发——实现子线程更新UI
  2. 仅仅是个人记录:Android(安卓)的机型适配:
  3. 使用adb logcat命令显示Android设备上的L
  4. Android(安卓)UI开发专题(五) Bitmap和Ca
  5. java/Android内存泄漏和内存溢出详解
  6. android手机与arm平台实现无线视频监控
  7. Android(安卓)Stuido如何查看快捷键冲突?
  8. Android开源项目分包方式学习(eoe、oschin
  9. Android(安卓)Studio JNI javah遇到的问
  10. Android(安卓)AndroidProgressLayout:加载