关于WebView的使用js和java的相互调用(包含按返回按钮时,返回上一页而不是推出activity)

来源:互联网 发布:淘宝网游戏交易平台 编辑:程序博客网 时间:2024/04/30 02:20
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">package com.minle.day09webview;import android.app.Activity;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.graphics.Bitmap;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.webkit.JsPromptResult;import android.webkit.JsResult;import android.webkit.WebChromeClient;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity implementsandroid.view.View.OnClickListener {private WebView webView;Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 获得webview控件webView = (WebView) findViewById(R.id.webView);// 获得webView的设置WebSettings settings = webView.getSettings();settings.setJavaScriptEnabled(true);// 设置支持js语言settings.setSupportZoom(true);// 支持缩放settings.setBuiltInZoomControls(true); // 支持内置缩放控制setWebView();btn = (Button) findViewById(R.id.button1);btn.setOnClickListener(this);}private void setWebView() {// 设置webview的加载页面的方法 client 客户端 顾客 委托人webView.setWebViewClient(new WebViewClient() {// 页面加载前@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {System.out.println("页面开始加载" + url);super.onPageStarted(view, url, favicon);}@Overridepublic void onPageFinished(WebView view, String url) {System.out.println("页面已完成加载" + url);super.onPageFinished(view, url);}// 这里返回true,表示交给浏览器,返回false,表示当前webview自己解决@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {// TODO Auto-generated method stubreturn super.shouldOverrideUrlLoading(view, url);}});}/////////////////////////////////////////////////////////////////////////////////////////////////////@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.button1:// 点击事件String url = "http://www.sohu.com/";// 网络资源String url_local = "file:///android_asset/jstest.html";// 本地资源格式String url_data = "<html><title>1409A</title><body><table><tr><td>用户名</td><td><input type='text' name='username'/></td></tr></table></body></html>";// webview加载当前页面webView.loadUrl(url);// webView.loadUrl(url_local);// 加载本地网络资源// webView.loadDataWithBaseURL("about:blank", url_data, "text/html",// "UTF-8", null);// 加载本地代码// 设置webView如何处理js的弹出框 webView.setWebChromeClient(new WebChromeClient() {// 返回true表示自己处理 ,本身的弹出框不再使用@Overridepublic boolean onJsAlert(WebView view, String url,String message, final JsResult result) {Toast.makeText(MainActivity.this, "   " + message, 0).show();AlertDialog.Builder builder = new Builder(MainActivity.this);builder.setMessage(message);builder.setNegativeButton("确定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubresult.confirm();}});builder.setPositiveButton("取消", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubresult.cancel();}});builder.show();return true;}@Override// js的确认框public boolean onJsConfirm(WebView view, String url,String message, JsResult result) {// TODO Auto-generated method stubreturn super.onJsConfirm(view, url, message, result);}// js的对话框@Overridepublic boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result) {// TODO Auto-generated method stubreturn super.onJsPrompt(view, url, message, defaultValue,result);}});break;default:break;}}//////////////////////////////////////////////////////////////////////////////////////////////// 这里做的事按返回键 按两次返回键的效果long exitTime;@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { // 如果当前webView可以返回上一页 if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) { // webVIew返回上一页  webView.goBack(); return true;}/*if (keyCode == KeyEvent.KEYCODE_BACK) {System.out.println(System.currentTimeMillis());if ((System.currentTimeMillis() - exitTime) > 2000) {Toast.makeText(MainActivity.this, "再按一次退出程序", 0).show();exitTime = System.currentTimeMillis();} else {System.exit(0);}return true;}*/return super.onKeyDown(keyCode, event);}}</span></span></span>


关于webVeiw时 js和java的相互调用

<span style="font-size:18px;"><span style="font-size:18px;">package com.example.day_10_android_js;import android.annotation.SuppressLint;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.webkit.JsResult;import android.webkit.WebChromeClient;import android.webkit.WebSettings;import android.webkit.WebView;import android.widget.Toast;public class MainActivity extends Activity {private WebView webView;@SuppressLint("JavascriptInterface")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);webView = (WebView) findViewById(R.id.webView);webView.loadUrl("file:///android_asset/jstest.html");WebSettings settings = webView.getSettings();//webVIew是否支持jssettings.setJavaScriptEnabled(true);webView.setWebChromeClient(new WebChromeClient(){/* (non-Javadoc) * @see android.webkit.WebChromeClient#onJsAlert(android.webkit.WebView, java.lang.String, java.lang.String, android.webkit.JsResult) */@Overridepublic boolean onJsAlert(WebView view, String url, String message,JsResult result) {// TODO Auto-generated method stubreturn super.onJsAlert(view, url, message, result);}});//js调用java//添加暴露给js的接口//参数一:object对象,实现要被js调用的方法;参数二:暴露给js的接口名webView.addJavascriptInterface(new Object(){@android.webkit.JavascriptInterface//4.0之后要加这个注解public void toast(String str){Toast.makeText(MainActivity.this, str, 0).show();}}, "jsCallJava");}//点击按钮,调用js方法public void callJs(View v){webView.loadUrl("javascript:testJavacallJs('"+"java传过来的"+"')");}}</span></span>



0 0