为了让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. H5 Web网页通过JS(JavaScript)脚本调用Android本地原生方法函数
  2. Android 中不弹出软键盘的方法
  3. android 静音方法
  4. android设置全屏以及解决设置全屏无效的方法
  5. Android 更新UI的两种方法——handler和runOnUiThread()
  6. Android开机执行指定shell脚本
  7. Android关于线程更新UI的方法

随机推荐

  1. Content Provider初谈和Android联系人信
  2. android 拉伸图片
  3. Android存储设备(U盘,SD卡)状态监测(《An
  4. Android中各种Adapter的使用方法
  5. FFMPEG for android
  6. Android开源框架之AFinal简介
  7. 自定义android的tab样式
  8. 从零开始的 Android 新项目 - 收藏集 -
  9. 安卓NDK——原生开发工具包
  10. Android3D游戏开发感觉