Compartilhar via


WebView.AddJavascriptInterface(Object, String) Método

Definição

Injeta o objeto Java fornecido neste 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

o objeto Java a ser injetado no contexto JavaScript deste WebView. null os valores são ignorados.

name
String

o nome usado para expor o objeto em JavaScript

Atributos

Comentários

Injeta o objeto Java fornecido neste WebView. O objeto é injetado em todos os quadros da página da Web, incluindo todos os iframes, usando o nome fornecido. Isso permite que os métodos do objeto Java sejam acessados a partir do JavaScript. Para aplicativos direcionados ao nível android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 de API e acima, somente métodos públicos que são anotados com android.webkit.JavascriptInterface podem ser acessados a partir do JavaScript. Para aplicativos direcionados ao nível android.os.Build.VERSION_CODES#JELLY_BEAN de API ou abaixo, todos os métodos públicos (incluindo os herdados) podem ser acessados, consulte a importante nota de segurança abaixo para obter implicações.

Observe que os objetos injetados não aparecerão em JavaScript até que a página seja a próxima (re)carregada. O JavaScript deve ser ativado antes de injetar o objeto. Por exemplo:

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>IMPORTANTE:</strong><ul><li> Esse método pode ser usado para permitir que o JavaScript controle o aplicativo host. Esse é um recurso poderoso, mas também apresenta um risco de segurança para aplicativos direcionados android.os.Build.VERSION_CODES#JELLY_BEAN ou anteriores. Os aplicativos destinados a uma versão posterior ainda estarão vulneráveis se o aplicativo for executado em um dispositivo com android.os.Build.VERSION_CODES#JELLY_BEAN Android anterior à versão 4.2. A maneira mais segura de usar esse método é direcionar android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 e garantir que o método seja chamado apenas quando executado no Android 4.2 ou posterior. Com essas versões mais antigas, o JavaScript poderia usar o reflexo para acessar os campos públicos de um objeto injetado. O uso desse método em um WebView contendo conteúdo não confiável pode permitir que um invasor manipule o aplicativo host de maneiras não intencionais, executando código Java com as permissões do aplicativo host. Use extremo cuidado ao usar esse método em um WebView que pode conter conteúdo não confiável.</li><li> JavaScript interage com o objeto Java em um thread privado em segundo plano deste WebView. Portanto, é necessário cuidado para manter a segurança da rosca. </li><li> Como o objeto é exposto a todos os quadros, qualquer quadro pode obter o nome do objeto e chamar métodos nele. Não há como dizer a origem do quadro de chamada do lado do aplicativo, portanto, o aplicativo não deve assumir que o chamador é confiável, a menos que o aplicativo possa garantir que nenhum conteúdo de terceiros seja carregado no WebView, mesmo dentro de um iframe.</li><li> Os campos do objeto Java não estão acessíveis.</li><li Para> aplicativos direcionados ao nível android.os.Build.VERSION_CODES#LOLLIPOP de API e acima, os métodos de objetos Java injetados são enumeráveis a partir do JavaScript.</li></ul>

Documentação Java para android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String).

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.

Aplica-se a