言語

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 を含む Web ページのすべてのフレームに挿入されます。 これにより、Java オブジェクトのメソッドに JavaScript からアクセスできるようになります。 API レベル android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 以上を対象とするアプリケーションの場合、javaScript からアクセスできるのは、 android.webkit.JavascriptInterface で注釈が付けられたパブリック メソッドのみです。 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 を実行しているデバイスでアプリが実行されている場合、 android.os.Build.VERSION_CODES#JELLY_BEAN より後のバージョンを対象とするアプリは引き続き脆弱です。 このメソッドを使用する最も安全な方法は、 android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 をターゲットにし、Android 4.2 以降で実行されている場合にのみメソッドが呼び出されるようにすることです。 これらの古いバージョンでは、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>

Javaドキュメント。

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

適用対象