Android 애플 리 케 이 션 과 Webview 간 의 상호작용

1.     하위 클래스 를 만 들 고 설정 합 니 다.일부 렌 더 링 내용 에 영향 을 줄 수 있 는 것 은 호출 될 수 있 습 니 다. 예 를 들 어 폼 이 잘못된 알림 을 제출 하 는 것 입 니 다.URL 의 로 딩 () 을 차단 할 수 있 습 니 다.
2.     addJavascriptInterface(Object obj, String interfaceName) 이 방법 을 자 바스 크 립 트 에 연결 하여 자 바스 크 립 트 가 이 방법 을 사용 할 수 있 도록 합 니 다.
중요 사항:
addJavascriptInterface () 를 사용 하여 프로그램 을 제어 할 수 있 습 니 다.이것 은 매우 유용 한 기능 이나 위험한 안전 문제 일 수 있다.신뢰 할 수 없 는 (예 를 들 어 일부 또는 모든 HTML 은 누 군가 또는 과정 에서 제공) WebView 의 HTML 일 때 공격 자가 주입 할 수 있 는 HTML 은 코드 와 가능 한 공격 자가 선택 한 모든 코드 를 실행 합 니 다.addJavascriptInterface 를 사용 하지 마 십시오. (이 웹 뷰 의 HTML 을 제외 하고) 당신 이 쓴 것 입 니 다.
스 레 드 에 연 결 된 자바 대상 이 아 닌 다른 스 레 드 에서 실 행 됩 니 다. 인 치 를 만 들 었 습 니 다.
매개 변수
OBJ
클래스 의 인 스 턴 스 가 자바 script 에 연결 되 어 있 으 며, 빈 인 스 턴 스 는 무시 되 었 습 니 다.
InterfaceName 중
이 이름 은 자 바스 크 립 트 에 노출 된 실례 에 사 용 됩 니 다.
 
3.     loadUrl(Stringurl, Map addition alHttpHeaders) 이 방법 을 사용 하면 웹 페이지 를 불 러 올 때 HttpHeaders 를 가 져 올 수 있 습 니 다.
4.     postUrl (Stringurl, byte [] postData) 이 웹 페이지 를 요청 할 때 post 데 이 터 를 가지 고 있 습 니 다.
test. html 파일
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);
		}

	};

좋은 웹페이지 즐겨찾기