次の方法で共有


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 ドキュメントandroid.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String)

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

適用対象