Android-----js和android的互调

 
http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/

我对其进行了修改,并加了简单的注释,这个例子的不仅是对js的操作,它还对android浏览器做了简单的介绍, 
这些我会在注释中一一讲解。

Javascript弹出框有如下三种:

  1. alert();
  2. window.confirm("Are you srue?");
  3. window.prompt("Please input some word";,"this is text");

WebChromeClient 中对三种dialog进行了捕捉,但不幸的是,并没有回调函数可以使用, 
或者说不能获得用户是点击“OK”还是“CANCEL”的操作结果。 
个人以为,这些方法的设置是为了对一些涉及到html操作的应用程序进行测试时使用的。 
在WebChromeClient中还有以下的方法:

  1. onProgressChanged(WebView view, int newProgress);
  2. onReceivedIcon(WebView view, Bitmap icon);
  3. onReceivedTitle(WebView view, String title);
  4. onRequestFocus(WebView view);
  5. onCloseWindow(WebView window);
  6. onProgressChanged(WebView view, int newProgress)

这些方法的使用我会在以后的博文中讲到. 
请大家先看今天讲解的重点

  1. public class WebViewDemo extends Activity {
  2. private static final String LOG_TAG = "WebViewDemo";
  3. private WebView mWebView;
  4. private TextView mReusultText ;
  5. private Handler mHandler = new Handler();
  6. @Override
  7. public void onCreate(Bundle icicle) {
  8. super.onCreate(icicle);
  9. setContentView(R.layout.main);
  10. //获得浏览器组件
  11. //WebView就是一个简单的浏览器
  12. //android浏览器源码存在于LINUX\android\package\apps\Browser中
  13. //里面的所有操作都是围绕WebView来展开的
  14. mWebView = (WebView) findViewById(R.id.webview);
  15. mReusultText = (TextView) findViewById(R.id.resultText);
  16. //WebSettings 几乎浏览器的所有设置都在该类中进行
  17. WebSettings webSettings = mWebView.getSettings();
  18. webSettings.setSavePassword(false);
  19. webSettings.setSaveFormData(false);
  20. webSettings.setJavaScriptEnabled(true);
  21. webSettings.setSupportZoom(false);
  22. mWebView.setWebChromeClient(new MyWebChromeClient());
  23. /*
  24. * DemoJavaScriptInterface类为js调用android服务器端提供接口
  25. * android 作为DemoJavaScriptInterface类的客户端接口被js调用
  26. * 调用的具体方法在DemoJavaScriptInterface中定义:
  27. * 例如该实例中的clickOnAndroid
  28. */
  29. mWebView.addJavascriptInterface(new DemoJavaScriptInterface(),"androd");
  30. mWebView.loadUrl("file:///android_asset/page.html");
  31. }
  32. final class DemoJavaScriptInterface {
  33. DemoJavaScriptInterface() {}
  34. /**
  35. * 该方法被浏览器端调用
  36. */
  37. public void clickOnAndroid() {
  38. mHandler.post(new Runnable() {
  39. public void run() {
  40. //调用js中的onJsAndroid方法
  41. mWebView.loadUrl("javascript:onJsAndroid()");
  42. }
  43. });
  44. }
  45. }
  46. /**
  47. * 继承WebChromeClient类
  48. * 对js弹出框时间进行处理
  49. *
  50. */
  51. final class MyWebChromeClient extends WebChromeClient {
  52. /**
  53. * 处理alert弹出框
  54. */
  55. @Override
  56. public boolean onJsAlert(WebView view,String url,
  57. String message,JsResult result) {
  58. Log.d(LOG_TAG,"onJsAlert:"+message");
  59. mReusultText.setText("Alert:"+message);
  60. //对alert的简单封装
  61. new AlertDialog.Builder(WebViewDemo.this).
  62. setTitle("Alert").setMessage(message).setPositiveButton("OK",
  63. new DialogInterface.OnClickListener() {
  64. @Override
  65. public void onClick(DialogInterface arg0, int arg1) {
  66. //TODO
  67. }
  68. }).create().show();
  69. result.confirm();
  70. return true;
  71. }
  72. /**
  73. * 处理confirm弹出框
  74. */
  75. @Override
  76. public boolean onJsConfirm(WebView view, String url, String message,
  77. JsResult result) {
  78. Log.d(LOG_TAG, "onJsConfirm:"+message);
  79. mReusultText.setText("Confirm:"+message);
  80. result.confirm();
  81. return super.onJsConfirm(view, url, message, result);
  82. }
  83. /**
  84. * 处理prompt弹出框
  85. */
  86. @Override
  87. public boolean onJsPrompt(WebView view, String url, String message,
  88. String defaultValue, JsPromptResult result) {
  89. Log.d(LOG_TAG,"onJsPrompt:"+message);
  90. mReusultText.setText("Prompt input is :"+message);
  91. result.confirm();
  92. return super.onJsPrompt(view, url, message, message, result);
  93. }
  94. }
  95. }
 
分类: Android
 
好文要顶 关注我 收藏该文  
4
0
 
(请您对文章做出评价)
 

Android-----js和android的互调的更多相关文章

  1. [转]JS调用Android里面的方法,Android调用JS里面的方法

    FROM : http://blog.csdn.net/hj563308597/article/details/45197709 Android WebView 在公司Android的开发过程中遇到一 ...

  2. WebView中JS调用Android Method 遇到的坑整理

    WebView是android中常用的一个组件,其作用是展示网页,并让网页和android app进行一些业务逻辑上的交互. 其坑无数,相信用过的都知道,一个一个来解决吧. 1.怎么互调: <! ...

  3. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  4. Atitit.android js 的键盘按键检测Back键Home键和Menu键事件

    Atitit.android js 的键盘按键检测Back键Home键和Menu键事件 1. onKeyDown @Override public boolean onKeyDown(int keyC ...

  5. WebView中Js与Android本地函数的相互调用

    介绍 随着Html5的普及,html在表现力上不一定比原生应用差,并且有很强的扩展兼容性,所以越来越多的应用是采用Html与Android原生混合开发模式实现. 既然要实现混合开发,那么Js与Andr ...

  6. PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码

    PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码 看看新闻网>看引擎>开源产品 0人收藏此文章, 发表于8小时前(2013-09-06 00:39) ...

  7. js和android及ios交互

    Android中Java和JavaScript交互 这种交互,Hybrid App 会用的比较多一点, 本文将介绍如何实现Java代码和Javascript代码的相互调用. Android提供了一个很 ...

  8. WebView之js调用Android类的方法传递数据

    1,具体的思路如下: 在android中写一个Activity,里面写一个webview,这个webview加载本地的一个html文件,显示这个网页,这个网页包括一个用户名和密码的输入框和两个按钮(只 ...

  9. Android JS桥交互("Uncaught ReferenceError: xxx is not defined or xxx has no method")

    网上android和js交互的代码有不少,也很容易搜到.最近在做的项目需要用到js桥,遇到了一些问题,记录下来,希望以后遇到能马上解决掉. 一开始我找的demo是从这个:http://blog.csd ...

  10. js调用android本地java代码

    js调用android本地java代码 当在Android上使用WebView控件开发一个Web应用时,可以创建一个通过Javascript调用Android端java代码的接口.也就是可以通过Jav ...

随机推荐

  1. 微信小程序开发入门

    微信小程序 首先说下结构吧,看看小程序到底长什么样子 这是一个微信提供的自己的开发工具,相当于xcode吧,由此也可以看出腾讯的野心并不小啊,左边的就是编辑调试什么的,往右就是一个模拟器,你可以选择i ...

  2. angular2入门,就这一篇就够了

    背景与概念: AngularJS2 是一款开源JavaScript库,由Google维护,用来协助单一页面应用程序运行. AngularJS2 是 Angular 1.x 的升级版本,性能上得到显著的 ...

  3. redis 扩展下载

    自己保存一下  免得以后忘记还得重新找T-T http://windows.php.net/downloads/pecl/snaps/redis/2.2.5/ phpinfo查看自己的php信息下载对 ...

  4. 浅谈Java的集合体系

    集合体系框架图 集合接口 Java集合类库将接口(interface)与实现(implementation)分离,如上图,Set是一个集合接口,而HashSet与TreeSet都是实现了Set接口的子 ...

  5. css3滚动效果

    .css{ -webkit-transition-duration: .3s;    transition-duration: .3s; }

  6. 从零开始部署小型企业级虚拟桌面 -- Vmware Horizon View 6 For Linux VDI -- 概念简介

    什么是桌面虚拟化? 桌面虚拟化有很多概念,此处谈论的,是指的一般企业使用的“服务器 + 虚拟机 + 云终端”的方式来实现的. 桌面虚拟化的原理是什么? 桌面虚拟化看上去高大上,实际上原理非常的简单.拿 ...

  7. 1643: [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪

    1643: [Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 2 ...

  8. java初级开发一系列的工具安装配置

    最近压力很大,刚刚帮朋友安装了一整套环境,按照印象写下此篇记录(没有图解),一是用来释放压力,二来希望可以帮到各位. 一.首先,Eclipse的安装,下载eclipse压缩包,一般为200~300M, ...

  9. dfs 无向图两节点间的所有路径

    标题:风险度量 X星系的的防卫体系包含 n 个空间站.这 n 个空间站间有 m 条通信链路,构成通信网.两个空间站间可能直接通信,也可能通过其它空间站中转. 对于两个站点x和y (x != y), 如 ...

  10. 【转】Lucene.NET详细使用与优化详解

    1 lucene简介1.1 什么是luceneLucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来就能用,它只是提供了一种工 ...