WebView.AddJavascriptInterface(Object, String) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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>
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.