Freigeben über


WebView.AddJavascriptInterface(Object, String) Methode

Definition

Fügt das bereitgestellte Java-Objekt in dieses WebView ein.

[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

Parameter

object
Object

das Java-Objekt, das in den JavaScript-Kontext dieses WebView eingefügt werden soll. null Werte werden ignoriert.

name
String

der Name, der zum Verfügbarmachen des Objekts in JavaScript verwendet wird

Attribute

Hinweise

Fügt das bereitgestellte Java-Objekt in dieses WebView ein. Das Objekt wird mit dem angegebenen Namen in alle Frames der Webseite eingefügt, einschließlich aller iframes. Auf diese Weise kann über JavaScript auf die Methoden des Java-Objekts zugegriffen werden. Für Anwendungen, die auf API-Ebene android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 und höher ausgerichtet sind, können nur öffentliche Methoden, die mit android.webkit.JavascriptInterface Anmerkungen versehen sind, über JavaScript aufgerufen werden. Für Anwendungen, die auf API-Ebene android.os.Build.VERSION_CODES#JELLY_BEAN oder darunter ausgerichtet sind, können auf alle öffentlichen Methoden (einschließlich der geerbten Methoden) zugegriffen werden, siehe den wichtigen Sicherheitshinweis unten für Auswirkungen.

Beachten Sie, dass eingefügte Objekte erst in JavaScript angezeigt werden, wenn die Seite als nächstes (neu) geladen wird. JavaScript sollte aktiviert werden, bevor das Objekt eingefügt wird. Zum Beispiel:

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> Diese Methode kann verwendet werden, um JavaScript die Steuerung der Hostanwendung zu ermöglichen. Dies ist ein leistungsfähiges Feature, stellt aber auch ein Sicherheitsrisiko für Apps dar, die auf apps ausgerichtet android.os.Build.VERSION_CODES#JELLY_BEAN oder früher ausgerichtet sind. Apps, die auf eine spätere Version abzielen, als android.os.Build.VERSION_CODES#JELLY_BEAN weiterhin anfällig sind, wenn die App auf einem Gerät ausgeführt wird, auf dem Android vor 4.2 ausgeführt wird. Die sicherste Möglichkeit, diese Methode zu verwenden, ist das Ziel android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 und sicherstellen, dass die Methode nur aufgerufen wird, wenn sie unter Android 4.2 oder höher ausgeführt wird. Mit diesen älteren Versionen könnte JavaScript Spiegelung verwenden, um auf die öffentlichen Felder eines eingefügten Objekts zuzugreifen. Die Verwendung dieser Methode in einer WebView, die nicht vertrauenswürdige Inhalte enthält, könnte es einem Angreifer ermöglichen, die Hostanwendung unbeabsichtigt zu bearbeiten und Java-Code mit den Berechtigungen der Hostanwendung auszuführen. Verwenden Sie extreme Sorgfalt, wenn Sie diese Methode in einer WebView verwenden, die nicht vertrauenswürdige Inhalte enthalten kann.</li li><> JavaScript interagiert mit einem Java-Objekt in einem privaten Hintergrundthread dieses WebView. Daher ist eine Pflege erforderlich, um die Threadsicherheit aufrechtzuerhalten. </li li><> Da das Objekt für alle Frames verfügbar gemacht wird, kann jeder Frame den Objektnamen abrufen und Methoden aufrufen. Es gibt keine Möglichkeit, den Ursprung des aufrufenden Frames von der App-Seite zu informieren. Daher darf die App nicht davon ausgehen, dass der Aufrufer vertrauenswürdig ist, es sei denn, die App kann garantieren, dass kein Inhalt von Drittanbietern in das WebView geladen wird, auch innerhalb eines iframes.</li li><> Die Felder des Java-Objekts sind nicht zugänglich.</li li>>< Für Anwendungen, die auf API-Ebene android.os.Build.VERSION_CODES#LOLLIPOP und höher ausgerichtet sind, können Methoden von eingefügten Java-Objekten aus JavaScript aufgezählt werden.</li></ul>

Java-Dokumentation für android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String).

Teile dieser Seite sind Änderungen auf der Grundlage von Arbeiten, die vom Android Open Source-Projekt erstellt und freigegeben werden und gemäß den in der Creative Commons 2.5 Attribution License beschriebenen Begriffen verwendet werden.

Gilt für: