Partager via


WebView.AddJavascriptInterface(Object, String) Méthode

Définition

Injecte l’objet Java fourni dans ce 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

Paramètres

object
Object

objet Java à injecter dans le contexte JavaScript de ce WebView. null les valeurs sont ignorées.

name
String

nom utilisé pour exposer l’objet en JavaScript

Attributs

Remarques

Injecte l’objet Java fourni dans ce WebView. L’objet est injecté dans tous les cadres de la page web, y compris tous les iframes, à l’aide du nom fourni. Cela permet aux méthodes de l’objet Java d’être accessibles à partir de JavaScript. Pour les applications ciblant le niveau android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 d’API et les versions ultérieures, seules les méthodes publiques avec qui sont annotées android.webkit.JavascriptInterface sont accessibles à partir de JavaScript. Pour les applications ciblées au niveau android.os.Build.VERSION_CODES#JELLY_BEAN de l’API ou en dessous, toutes les méthodes publiques (y compris celles héritées) sont accessibles, consultez la note de sécurité importante ci-dessous pour obtenir des implications.

Notez que les objets injectés ne s’affichent pas en JavaScript tant que la page n’est pas ensuite chargée (re)chargé. JavaScript doit être activé avant d’injecter l’objet. Par exemple :

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> Cette méthode peut être utilisée pour permettre à JavaScript de contrôler l’application hôte. Il s’agit d’une fonctionnalité puissante, mais présente également un risque de sécurité pour les applications ciblant android.os.Build.VERSION_CODES#JELLY_BEAN ou antérieurement. Les applications qui ciblent une version ultérieure android.os.Build.VERSION_CODES#JELLY_BEAN à celle qui sont toujours vulnérables si l’application s’exécute sur un appareil exécutant Android antérieure à la version 4.2. La méthode la plus sécurisée pour utiliser cette méthode consiste à cibler android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 et à s’assurer que la méthode est appelée uniquement lors de l’exécution sur Android 4.2 ou version ultérieure. Avec ces versions antérieures, JavaScript peut utiliser la réflexion pour accéder aux champs publics d’un objet injecté. L’utilisation de cette méthode dans un WebView contenant du contenu non approuvé peut permettre à un attaquant de manipuler l’application hôte de manière inattendue, en exécutant du code Java avec les autorisations de l’application hôte. Utilisez des soins extrêmes lors de l’utilisation de cette méthode dans un WebView qui peut contenir du contenu non approuvé.</li><javaScript> interagit avec l’objet Java sur un thread d’arrière-plan privé de ce WebView. Les soins sont donc nécessaires pour maintenir la sécurité des threads. </li li><> Étant donné que l’objet est exposé à toutes les trames, n’importe quel frame peut obtenir le nom de l’objet et appeler des méthodes dessus. Il n’existe aucun moyen de dire à l’origine de l’image appelante du côté de l’application, de sorte que l’application ne doit pas supposer que l’appelant est fiable, sauf si l’application peut garantir qu’aucun contenu tiers n’est jamais chargé dans le WebView même à l’intérieur d’un iframe.</li li><> Les champs de l’objet Java ne sont pas accessibles.</li li>>< Pour les applications ciblées au niveau android.os.Build.VERSION_CODES#LOLLIPOP de l’API et versions ultérieures, les méthodes d’objets Java injectés sont énumérables à partir de JavaScript.</li></ul>

Documentation Java pour android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String).

Les parties de cette page sont des modifications basées sur le travail créé et partagé par le projet Android Open Source et utilisés en fonction des termes décrits dans la licence d’attribution Creative Commons 2.5.

S’applique à