public class WebViewActivity extendsActivity {privateButton sendRequest,bt4;privateTextView responseText,textView5;private final Handler handler=new Handler();//只有用handel才能修改android控件的值
private class AndroidBridge //这个类中提供各种js可调用的方法。
{
@JavascriptInterfacepublic void callAndroid(finalString arg)
{
handler.post(newRunnable(){public voidrun()
{
Log.d("ZW", "calAndroid("+arg+")");
textView5.setText(arg);
}
});
}
@JavascriptInterfacepublic void callAndroid222(final String arg,finalString arg2)
{
handler.post(newRunnable(){public voidrun()
{
Log.d("zwzw", "callAndroid222("+arg+","+arg2+")");
textView5.setText(arg);
}
});
}
}
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
textView5=(TextView)findViewById(R.id.textView5);
webView=(WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);//让web可以运行js
String url="file:///android_asset/test.html";
webView.loadUrl(url);webView.addJavascriptInterface(new AndroidBridge(), "android"); //将那个实例化的函数类设置为”android"的js接口这个。这里什么android名字前台js调用就用什么,比如这这里给名字为abc,html中调用就用οnclick="window.abc.callAndroid(...."//覆盖重写html中js的alert方法,还可以覆盖重写别的方法,可以转到定义去查。。
webView.setWebChromeClient(newWebChromeClient() {
@Overridepublic booleanonJsAlert(WebView view, String url, String message, JsResult result) {
Log.d("ZW", "onJsAlert(" + view + "," + url + "," + message + "," + result + ")");
Toast.makeText(WebViewActivity.this, message, Toast.LENGTH_SHORT).show();
result.confirm();return true;
}
});//设置可以被java截获的js事件。//点android控件调用js方法
bt4=(Button)findViewById(R.id.bt4);
bt4.setOnClickListener(newView.OnClickListener() {public voidonClick(View v) {
Log.d("ZW", "onClick(" + v + ")");
webView.loadUrl("javascript:callJS('hello from android')"); //java调用js的函数
}
});
}
}