您的位置:首页 > 移动开发 > Android开发

使用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方法.

`

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 模拟器上 该实例正常运行.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息