获取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代码:
package com.tsh.mywebview; import android.annotation.SuppressLint; android.app.Activity; android.app.ProgressDialog; android.graphics.Bitmap; android.os.Bundle; android.view.KeyEvent; android.view.Menu; android.view.MenuItem; android.view.Window; android.webkit.JavascriptInterface; android.webkit.WebSettings; android.webkit.WebView; android.webkit.WebViewClient; android.widget.Toast; public class MainActivity extends Activity { private WebView webview; ProgressDialog pd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); pd=new ProgressDialog(this); pd.setMessage("正在加载..."); @H_403_171@//webview的简单设置 webview=(WebView) findViewById(R.id.wv_internet); http://100.65.187.106/test.PHP webview.loadUrl("http://100.65.187.106/test.PHP"); WebSettings websettings=webview.getSettings(); websettings.setSupportZoom(true); websettings.setBuiltInZoomControls(); js交互 new MyJavascript().showToast("111"); websettings.setJavaScriptEnabled(); webview.addJavascriptInterface(new MyJavascript(),"Android"); webview.loadUrl("javascript:documentWrite('测试')"); webview.setWebViewClient(new WebViewClient(){ @Override onPageStarted(WebView view,String url,Bitmap favicon) { pd.show(); } @Override onPageFinished(WebView view,String url) { pd.dismiss(); } }); } 暴露给js的功能接口 class MyJavascript{ 显示吐司 如果target 大于等于API 17,则需要加上如下注解 @JavascriptInterface showToast(String text) { Toast.makeText(MainActivity.this,text,1).show(); } 显示loading showProgressDialog(String text) { pd.setMessage(text); pd.show(); } } 后退键 @Override boolean onKeyDown(int keyCode,KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK&&webview.canGoBack()){ webview.goBack(); return ; } .onKeyDown(keyCode,event); } 菜单键 boolean onCreateOptionsMenu(Menu menu) { menu.add(0,"刷新"); menu.add(0,1,"后退"); .onCreateOptionsMenu(menu); } 菜单点击事件 onOptionsItemSelected(MenuItem item) { switch (item.getOrder()) { case 0: webview.reload(); break; case 1: if(webview.canGoBack()){ webview.goBack(); } case 2(webview.canGoForward()){ webview.goForward(); } .onOptionsItemSelected(item); } }
js代码:
<html> head> Meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> title>测试android程序</body> 测试android和js交互 brbutton onClick="showToast()">显示吐司button="showProgressDialog()">显示loadingscript type="text/javascript"> function showToast(){ Android.showToast("显示吐司); } showProgressDialog(){ Android.showProgressDialog(显示进度条); } script>