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交互的实现方法,希望对大家以上帮助!