Android中WebView与Js交互的实现方法
获取WebView对象
调用WebView对象的getSettings()方法,获取WebSettings对象
调用WebSettings对象的setJavaScriptEnabled()方法,设置js可用,参数:布尔值
在判断是否支持js的时候,不要用alert(),默认不起作用,可以先用document.write()测试
调用WebView对象的addJavascriptInterface(obj,interfaceName)方法,添加js接口,参数:Object对象,String接口名称(这个对象在js中的别名)
定义一个内部类MyJavascript
定义一个方法showToast(),显示吐司,api版本大于17需要加注解@JavascriptInterface
java代码:
packagecom.tsh.mywebview;
importandroid.annotation.SuppressLint;
importandroid.app.Activity;
importandroid.app.ProgressDialog;
importandroid.graphics.Bitmap;
importandroid.os.Bundle;
importandroid.view.KeyEvent;
importandroid.view.Menu;
importandroid.view.MenuItem;
importandroid.view.Window;
importandroid.webkit.JavascriptInterface;
importandroid.webkit.WebSettings;
importandroid.webkit.WebView;
importandroid.webkit.WebViewClient;
importandroid.widget.Toast;
publicclassMainActivityextendsActivity{
privateWebViewwebview;
privateProgressDialogpd;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
pd=newProgressDialog(this);
pd.setMessage("正在加载...");
//webview的简单设置
webview=(WebView)findViewById(R.id.wv_internet);
//http://100.65.187.106/test.php
webview.loadUrl("http://100.65.187.106/test.php");
WebSettingswebsettings=webview.getSettings();
websettings.setSupportZoom(true);
websettings.setBuiltInZoomControls(true);
//js交互
newMyJavascript().showToast("111");
websettings.setJavaScriptEnabled(true);
webview.addJavascriptInterface(newMyJavascript(),"Android");
webview.loadUrl("javascript:documentWrite('测试')");
webview.setWebViewClient(newWebViewClient(){
@Override
publicvoidonPageStarted(WebViewview,Stringurl,Bitmapfavicon){
pd.show();
}
@Override
publicvoidonPageFinished(WebViewview,Stringurl){
pd.dismiss();
}
});
}
//暴露给js的功能接口
publicclassMyJavascript{
//显示吐司
//如果target大于等于API17,则需要加上如下注解
@JavascriptInterface
publicvoidshowToast(Stringtext){
Toast.makeText(MainActivity.this,text,1).show();
}
//显示loading
@JavascriptInterface
publicvoidshowProgressDialog(Stringtext){
pd.setMessage(text);
pd.show();
}
}
//后退键
@Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if(keyCode==KeyEvent.KEYCODE_BACK&&webview.canGoBack()){
webview.goBack();
returntrue;
}
returnsuper.onKeyDown(keyCode,event);
}
//菜单键
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
menu.add(0,0,0,"刷新");
menu.add(0,0,1,"后退");
menu.add(0,0,2,"前进");
returnsuper.onCreateOptionsMenu(menu);
}
//菜单点击事件
@Override
publicbooleanonOptionsItemSelected(MenuItemitem){
switch(item.getOrder()){
case0:
webview.reload();
break;
case1:
if(webview.canGoBack()){
webview.goBack();
}
break;
case2:
if(webview.canGoForward()){
webview.goForward();
}
break;
}
returnsuper.onOptionsItemSelected(item);
}
}
js代码:
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
<title>测试android程序</title>
</head>
<body>
测试android和js交互
<br/>
<buttononClick="showToast()">显示吐司</button>
<br/>
<buttononClick="showProgressDialog()">显示loading</button>
<scripttype="text/javascript">
functionshowToast(){
Android.showToast("显示吐司");
}
functionshowProgressDialog(){
Android.showProgressDialog("显示进度条");
}
</script>
</body>
</html>
以上内容是小编给大家介绍的Android中WebView与Js交互的实现方法,希望对大家以上帮助!