为了让WebView中的JavaScript脚本调用Android方法,WebView提供了一个WebSettings工具类.该工具类提供了大量的方法来管理WebView的选项设置,其中它的 setJavaScriptEnabled (boolean flag)即可让WebView中的JavaScript脚本调用Android方法. 除此之外,为了把Android对象暴露给WebView中的JavaScript代码,WebView提供了 addJavascriptInterface(Object object, String name) 方法.该方法负责把Object 对象暴露成 JavaScript中的name对象.


在WebView的JavaScript中调用Android方法只要如下三个步骤:
` 1. 调用 WebView关联的WebSettings的 setJavaScriptEnabled (true)启用JavaScript调用功能.
2. 调用 WebView 的addJavascriptInterface(Object object, String name) 方法将把Object 对象暴露成 JavaScript中的name对象.
3. 在JavaScript脚本中通过暴露的name对象调用Android方法.

`


package com.net.webview;import android.app.AlertDialog;import android.content.Context;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.webkit.WebSettings;import android.webkit.WebView;import android.widget.Toast;/** * 该示例示范在 JavaScript 中调用Android 方法. */public class JsCallAndroidActivity extends AppCompatActivity {WebView myWebview;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_js_call_android);        myWebview = (WebView) findViewById(R.id.my_webview);        //此处直接使用 file协议加载本地assets目录下的 HTML文件        myWebview.loadUrl("file:///android_asset/test.html");        //获取WebView的设置对象 webSetting        WebSettings webSettings = myWebview.getSettings();        //开启 JavaScript        webSettings.setJavaScriptEnabled(true);        //将 MyObject 对象暴露给 JavaScript 脚本.        //这样 test.html页面中的 JavaScript 可以通过 myObj 来调用 MyObject 的方法.        myWebview.addJavascriptInterface(new MyObject(this),"myObj");    }    private class MyObject {        Context mContext;        public MyObject(Context c) {            mContext = c;        }        //该方法将会暴露给 JavaScript脚本使用        public void showToast(String name) {            Toast.makeText(mContext, name + " ,您好!", Toast.LENGTH_SHORT).show();        }        //该方法将会暴露给 JavaScript脚本使用        public void showList() {            //显示一个普通的列表对话框            new AlertDialog.Builder(mContext)                    .setTitle("图书列表")                    .setIcon(R.mipmap.ic_launcher)                    .setItems(new String[]{"Android","Java","Webview"},null)                    .setPositiveButton("确定",null)                    .create()                    .show();        }    }}

当用户单击页面上的按钮时,该页面上 JavaScript脚本会通过MyObject调用Android方法.用户单击第2个按钮,该页面的javaScript脚本将会通过myObj调用Android的 showList()方法.
在android 4.1.2 模拟器上 该实例正常运行.

更多相关文章

  1. Android(安卓)Studio常用快捷键、Android(安卓)Studio快捷键大全
  2. [gitbook] Android框架分析系列之Android(安卓)stagefright框架
  3. android 静音方法
  4. Android(安卓)中不弹出软键盘的方法
  5. H5 Web网页通过JS(JavaScript)脚本调用Android本地原生方法函数
  6. Android深入浅出之Audio 第一部分 AudioTrack分析
  7. 初涉Android蓝牙开发 收藏以备后用
  8. Android
  9. Android中Java与web通信

随机推荐

  1. MySQL分区表的正确使用方法
  2. MySQL慢查询日志的基本使用教程
  3. MySQL InnoDB 二级索引的排序示例详解
  4. MySQL执行计划的深入分析
  5. B-树的插入过程介绍
  6. B-树的删除过程介绍
  7. B-Tree的性质介绍
  8. MySQL语句整理及汇总介绍
  9. Mysql两表联合查询的四种情况总结
  10. MySQL DeadLock故障排查全过程记录