WebView.AddJavascriptInterface(Object, String) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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>
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.