使用WebView中的JavaScript调用Android方法
2016-07-02 21:01
796 查看
为了让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方法.
`
当用户单击页面上的按钮时,该页面上 JavaScript脚本会通过MyObject调用Android方法.用户单击第2个按钮,该页面的javaScript脚本将会通过myObj调用Android的 showList()方法.
在android 4.1.2 模拟器上 该实例正常运行.
在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 模拟器上 该实例正常运行.
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager