最近在做项目中需要用到webview中调用android方法,完成activity跳转等操作。方法如下:webview.getwebsetting 获取webview管理类,可定义网页缩放,字体大小,是否支持js等。
websettings.setJavaScriptEnabled(true);设置webview支持网页中的js
在webview中调用webview.addJavascriptInterface(Class,name);Class为处理类,name为在暴露给js的对象名称,js通过这个name调用对象方法,
具体代码如下:
package com.taotaojin;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class DeclareActivity extends Activity {
private WebView declare_webview;
private String urlstr;//网址
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_declare);
initView();
loadUrl();
}
private void initView() {
declare_webview = (WebView)findViewById(R.id.declare_webview);
}
@SuppressLint("JavascriptInterface")
private void loadUrl(){
// urlstr = "http://www.taotaojin.com/micro/microDivRegedit.jsp?inviteId=";
WebSettings settings = declare_webview.getSettings();
settings.setJavaScriptEnabled(true);
settings.setBuiltInZoomControls(true);
//设置跳转仍在此页面
declare_webview.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view,String url) {
// view.loadUrl(url);
return true;
}
public void on() {
}
});
// declare_webview.loadUrl(urlstr);
declare_webview.loadUrl("file:///android_asset/test.html");
declare_webview.requestFocus();
//暴露java接口给js
declare_webview.addJavascriptInterface(DeclareActivity.this, "myobject");
}
//返回键关闭当前activity
public boolean onKeyDown(int keyCode ,KeyEvent event){
if(keyCode == KeyEvent.KEYCODE_BACK)
{
DeclareActivity.this.finish();
return true;
}
else{
return super.onKeyDown(keyCode, event);
}
}//onKeyDown
//js调用方法
public void test() {
Toast.makeText(DeclareActivity.this, "success",Toast.LENGTH_SHORT).show();
//DeclareActivity.this.finish();
}
}
在js中使用java方法:可在java方法中定义形参和返回值,在js中对应使用
test
相反,在android中调用js函数较为简单,只需在webview.loadUrl("javascript:funcitonA()");
但获取返回值较为麻烦,需要使用jni或者在js中调用android方法传入需要的值。目前还不是很了解
另外,在loadurl的时候,可以动态加入一段js代码,通过getElementByTagName("input/img")来监听点击事件。然后调用本地暴露的接口