Compartir a través de


WebView.AddJavascriptInterface(Object, String) Método

Definición

Inserta el objeto Java proporcionado en este Objeto 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

Parámetros

object
Object

objeto de Java que se va a insertar en el contexto de JavaScript de este webView. null se omiten los valores.

name
String

el nombre usado para exponer el objeto en JavaScript

Atributos

Comentarios

Inserta el objeto Java proporcionado en este Objeto WebView. El objeto se inserta en todos los fotogramas de la página web, incluidos todos los iframes, utilizando el nombre proporcionado. Esto permite el acceso a los métodos del objeto Java desde JavaScript. En el caso de las aplicaciones destinadas al nivel android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 de API y versiones posteriores, solo se puede acceder a los métodos públicos anotados con android.webkit.JavascriptInterface desde JavaScript. Para las aplicaciones destinadas al nivel android.os.Build.VERSION_CODES#JELLY_BEAN de API o inferior, se puede acceder a todos los métodos públicos (incluidos los heredados), consulte la nota de seguridad importante a continuación para ver las implicaciones.

Tenga en cuenta que los objetos insertados no aparecerán en JavaScript hasta que se cargue la página (re)loaded. JavaScript debe estar habilitado antes de insertar el objeto. Por ejemplo:

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> Este método se puede usar para permitir que JavaScript controle la aplicación host. Se trata de una característica eficaz, pero también presenta un riesgo de seguridad para las aplicaciones destinadas android.os.Build.VERSION_CODES#JELLY_BEAN a o versiones anteriores. Las aplicaciones que tienen como destino una versión posterior a android.os.Build.VERSION_CODES#JELLY_BEAN la que siguen siendo vulnerables si la aplicación se ejecuta en un dispositivo que ejecuta Android anterior a la versión 4.2. La forma más segura de usar este método es tener como destino android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 y asegurarse de que solo se llama al método cuando se ejecuta en Android 4.2 o posterior. Con estas versiones anteriores, JavaScript podría usar la reflexión para acceder a los campos públicos de un objeto insertado. El uso de este método en una vista web que contiene contenido que no es de confianza podría permitir que un atacante manipule la aplicación host de maneras no deseadas, ejecutando código Java con los permisos de la aplicación host. Use atención extrema al usar este método en un WebView que podría contener contenido que no es de confianza.</li><li> JavaScript interactúa con el objeto Java en un subproceso privado y en segundo plano de este WebView. Por lo tanto, se requiere cuidado para mantener la seguridad de los subprocesos. </li li><> Dado que el objeto está expuesto a todos los fotogramas, cualquier fotograma podría obtener el nombre del objeto y llamar a métodos en él. No hay ninguna manera de indicar el origen del marco de llamada desde la aplicación, por lo que la aplicación no debe asumir que el autor de la llamada es de confianza a menos que la aplicación pueda garantizar que ningún contenido de terceros se cargue nunca en webView incluso dentro de un iframe.</li li><> Los campos del objeto Java no son accesibles.</li li>>< Para las aplicaciones destinadas al nivel android.os.Build.VERSION_CODES#LOLLIPOP de API y versiones posteriores, los métodos de objetos java insertados se enumeran desde JavaScript.</li></ul>

Documentación de Java para android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String).

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Se aplica a