Android 애플 리 케 이 션 과 Webview 간 의 상호작용
2. addJavascriptInterface(Object obj, String interfaceName) 이 방법 을 자 바스 크 립 트 에 연결 하여 자 바스 크 립 트 가 이 방법 을 사용 할 수 있 도록 합 니 다.
중요 사항:
addJavascriptInterface () 를 사용 하여 프로그램 을 제어 할 수 있 습 니 다.이것 은 매우 유용 한 기능 이나 위험한 안전 문제 일 수 있다.신뢰 할 수 없 는 (예 를 들 어 일부 또는 모든 HTML 은 누 군가 또는 과정 에서 제공) WebView 의 HTML 일 때 공격 자가 주입 할 수 있 는 HTML 은 코드 와 가능 한 공격 자가 선택 한 모든 코드 를 실행 합 니 다.addJavascriptInterface 를 사용 하지 마 십시오. (이 웹 뷰 의 HTML 을 제외 하고) 당신 이 쓴 것 입 니 다.
스 레 드 에 연 결 된 자바 대상 이 아 닌 다른 스 레 드 에서 실 행 됩 니 다. 인 치 를 만 들 었 습 니 다.
매개 변수
OBJ
클래스 의 인 스 턴 스 가 자바 script 에 연결 되 어 있 으 며, 빈 인 스 턴 스 는 무시 되 었 습 니 다.
InterfaceName 중
이 이름 은 자 바스 크 립 트 에 노출 된 실례 에 사 용 됩 니 다.
3. loadUrl(Stringurl, Map
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);
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.