WebView.AddJavascriptInterface(Object, String) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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>
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.