다음을 통해 공유


WebView.AddJavascriptInterface(Object, String) 메서드

정의

제공된 Java 개체를 이 WebView에 삽입합니다.

[Android.Runtime.Register("addJavascriptInterface", "(Ljava/lang/Object;Ljava/lang/String;)V", "GetAddJavascriptInterface_Ljava_lang_Object_Ljava_lang_String_Handler")]
public virtual void AddJavascriptInterface (Java.Lang.Object object, string name);
[<Android.Runtime.Register("addJavascriptInterface", "(Ljava/lang/Object;Ljava/lang/String;)V", "GetAddJavascriptInterface_Ljava_lang_Object_Ljava_lang_String_Handler")>]
abstract member AddJavascriptInterface : Java.Lang.Object * string -> unit
override this.AddJavascriptInterface : Java.Lang.Object * string -> unit

매개 변수

object
Object

이 WebView의 JavaScript 컨텍스트에 삽입할 Java 개체입니다. null 값은 무시됩니다.

name
String

JavaScript에서 개체를 노출하는 데 사용되는 이름

특성

설명

제공된 Java 개체를 이 WebView에 삽입합니다. 개체는 제공된 이름을 사용하여 모든 iframe을 포함하여 웹 페이지의 모든 프레임에 삽입됩니다. 이렇게 하면 JavaScript에서 Java 개체의 메서드에 액세스할 수 있습니다. API 수준 android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 이상을 대상으로 하는 애플리케이션의 경우 주석이 추가된 android.webkit.JavascriptInterface 공용 메서드만 JavaScript에서 액세스할 수 있습니다. API 수준 android.os.Build.VERSION_CODES#JELLY_BEAN 이하를 대상으로 하는 애플리케이션의 경우 모든 공용 메서드(상속된 메서드 포함)에 액세스할 수 있습니다. 의미는 아래의 중요한 보안 정보를 참조하세요.

삽입된 개체는 페이지가 다음(다시) 로드될 때까지 JavaScript에 표시되지 않습니다. 개체를 삽입하기 전에 JavaScript를 사용하도록 설정해야 합니다. 예시:

class JsObject {
               {@literal @}JavascriptInterface
               public String toString() { return "injectedObject"; }
            }
            webview.getSettings().setJavaScriptEnabled(true);
            webView.addJavascriptInterface(new JsObject(), "injectedObject");
            webView.loadData("<!DOCTYPE html><title></title>", "text/html", null);
            webView.loadUrl("javascript:alert(injectedObject.toString())");

<strong>IMPORTANT:</strong><ul><li> 이 메서드를 사용하여 JavaScript에서 호스트 애플리케이션을 제어할 수 있습니다. 이 기능은 강력한 기능이지만 앱 대상 android.os.Build.VERSION_CODES#JELLY_BEAN 지정 또는 이전 버전에 대한 보안 위험도 제공합니다. 앱이 4.2 이전 버전의 android.os.Build.VERSION_CODES#JELLY_BEAN Android를 실행하는 디바이스에서 실행되는 경우 이후 버전을 대상으로 하는 앱은 여전히 취약합니다. 이 메서드를 사용하는 가장 안전한 방법은 Android 4.2 이상에서 실행되는 경우에만 메서드를 대상으로 지정 android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 하고 호출하도록 하는 것입니다. 이러한 이전 버전을 사용하면 JavaScript에서 리플렉션을 사용하여 삽입된 개체의 공용 필드에 액세스할 수 있습니다. 신뢰할 수 없는 콘텐츠가 포함된 WebView에서 이 메서드를 사용하면 공격자가 의도하지 않은 방식으로 호스트 애플리케이션을 조작하여 호스트 애플리케이션의 권한으로 Java 코드를 실행할 수 있습니다. 신뢰할 수 없는 콘텐츠를 포함할 수 있는 WebView에서 이 메서드를 사용하는 경우 주의해야 합니다.</li li><> JavaScript는 이 WebView의 프라이빗 백그라운드 스레드에서 Java 개체와 상호 작용합니다. 따라서 스레드 보안을 유지하려면 주의가 필요합니다. </li li><> 개체가 모든 프레임에 노출되기 때문에 모든 프레임은 개체 이름과 호출 메서드를 가져올 수 있습니다. 앱 쪽에서 호출 프레임의 원본을 알 수 있는 방법은 없으므로 앱이 iframe 내에서도 타사 콘텐츠가 WebView에 로드되지 않도록 보장할 수 없다면 앱에서 호출자가 신뢰할 수 있다고 가정해서는 안 됩니다.</li><li> Java 개체의 필드에 액세스할 수 없습니다.</li li>>< API 수준 android.os.Build.VERSION_CODES#LOLLIPOP 이상을 대상으로 하는 애플리케이션의 경우 삽입된 Java 개체의 메서드는 JavaScript에서 열거할 수 있습니다.</li></ul>

에 대한 android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String)Java 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

적용 대상