Android Application 和Webview 之间的交互

1.     创建和设置WebViewClient子类。当一些可以影响渲染内容是它会被调用,例如,表单提交错误提示。也可以通过shouldOverrideUrlLoading()拦截URL的加载()。

2.     addJavascriptInterface(Object obj, String interfaceName)使用这个方法绑定到JavaScript,使JavaScript可以调用此方法。

重要事项:

使用addJavascriptInterface()允许JavaScript来控制您的应用程序。这可以是一个非常有用的功能或一个危险的安全问题。当不可信(例如,部分或全部的HTML是由某些人或过程提供)的WebView的HTML时,攻击者可以注入的HTML,将执行你的代码和可能的攻击者选择的任何代码。
不要使用addJavascriptInterface(除非在此的WebView的HTML),是由你写成的。

在另一个线程,而不是在线程绑定的Java对象运行,它被修建英寸

参数

OBJ

类的实例绑定到JavaScript,空实例被忽略。

InterfaceName中

该名称用于暴露在JavaScript中的实例。

 

3.     loadUrl(Stringurl, Map<String, String> additionalHttpHeaders)使用这个方法可以在加载网页时带HttpHeaders。

4.     postUrl(Stringurl, byte[] postData)请求网页时带有post数据。

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
;

/**
 * @author 
 * 
 */
public class RegisterActivity extends Activity {
	private final static String tag = "RegisterActivity";
	WebView mWebView;
	Activity mActivity;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		getWindow().requestFeature(Window.FEATURE_PROGRESS);
		setContentView(R.layout.register);
		mActivity = this;
		mWebView = (WebView) findViewById(R.id.register_webview);
		mWebView.getSettings().setJavaScriptEnabled(true);
		mWebView.getSettings().setBuiltInZoomControls(true);
		mWebView.getSettings().setDefaultTextEncodingName("UTF-8");

		mWebView.setWebChromeClient(mWebChromeClient);
		mWebView.setWebViewClient(mWebViewClient);
		mWebView.addJavascriptInterface(obj, "customFuction");
		mWebView.loadUrl(QingUtil.URL_REGISTER);
		// mWebView.loadUrl("file:///android_asset/test.html");
		// mWebView.loadUrl("http://www.baidu.com");
	}

	Object obj = new Object() {
		public void getMessage(String str) {
			Toast.makeText(getBaseContext(), "Application-getMessage:" + str,
					3000).show();
		}
	};

	WebChromeClient mWebChromeClient = new WebChromeClient() {

		@Override
		public boolean onJsAlert(WebView view, String url, String message,
				JsResult result) {
			Toast.makeText(getBaseContext(),
					"onJsAlert - url:" + url + " message:" + message, 3000)
					.show();
			return super.onJsAlert(view, url, message, result);
		}

		@Override
		public boolean onJsConfirm(WebView view, String url, String message,
				JsResult result) {
			Toast.makeText(getBaseContext(),
					"onJsConfirm - url:" + url + " message:" + message, 3000)
					.show();
			return super.onJsConfirm(view, url, message, result);
		}

		@Override
		public boolean onJsPrompt(WebView view, String url, String message,
				String defaultValue, JsPromptResult result) {
			// TODO Auto-generated method stub
			return super.onJsPrompt(view, url, message, defaultValue, result);
		}

		@Override
		public void onProgressChanged(WebView view, int newProgress) {
			mActivity.setProgress(newProgress);
			Log.d("Test", "newProgress = " + newProgress);
			super.onProgressChanged(view, newProgress);
		}

	};

	WebViewClient mWebViewClient = new WebViewClient() {

		@Override
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
			Log.d(tag, "shouldOverrideUrlLoading - " + url);
			if (url.startsWith("sms:")) {
				Intent sendIntent = new Intent(Intent.ACTION_VIEW);
				sendIntent.putExtra("address", url.replace("sms:", ""));
				sendIntent.setType("vnd.android-dir/mms-sms");
				startActivity(sendIntent);
				return true;
			}
			return super.shouldOverrideUrlLoading(view, url);
		}

		@Override
		public void onReceivedError(WebView view, int errorCode,
				String description, String failingUrl) {
			Toast.makeText(mActivity, "Oh no! " + description,
					Toast.LENGTH_SHORT).show();
			super.onReceivedError(view, errorCode, description, failingUrl);
		}

	};
test.html文件
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <script type=text/JavaScript>
  function alertFuction(){
   var a=1;
   var b=2;
   alert(a+b);
  }
  function confirmFuction(){
   confirm("你确定要删除吗?");
  }
  function setText(){
    alert("js中的方法");
  }
</script>
<input οnclick=alertFuction() type=button value=alertFuction>
<input οnclick=confirmFuction() type=button value=confirmFuction>
<input οnclick="javascript:window.customFuction.getMessage('js中的字符串')" type=button value=customFuction>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值