Condividi tramite


WebView.AddJavascriptInterface(Object, String) Metodo

Definizione

Inserisce l'oggetto Java fornito in questo 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

Parametri

object
Object

oggetto Java da inserire nel contesto JavaScript di questo WebView. null i valori vengono ignorati.

name
String

nome usato per esporre l'oggetto in JavaScript

Attributi

Commenti

Inserisce l'oggetto Java fornito in questo WebView. L'oggetto viene inserito in tutti i frame della pagina Web, inclusi tutti gli iframe, usando il nome specificato. In questo modo è possibile accedere ai metodi dell'oggetto Java da JavaScript. Per le applicazioni destinate al livello android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 API e versioni successive, è possibile accedere solo ai metodi pubblici con annotazioni da android.webkit.JavascriptInterface JavaScript. Per le applicazioni destinate al livello android.os.Build.VERSION_CODES#JELLY_BEAN API o al di sotto, è possibile accedere a tutti i metodi pubblici (inclusi quelli ereditati), vedere la nota di sicurezza importante riportata di seguito per le implicazioni.

Si noti che gli oggetti inseriti non verranno visualizzati in JavaScript fino a quando la pagina non verrà caricata nuovamente. JavaScript deve essere abilitato prima di inserire l'oggetto. Ad esempio:

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> Questo metodo può essere usato per consentire a JavaScript di controllare l'applicazione host. Si tratta di una funzionalità potente, ma presenta anche un rischio di sicurezza per le app destinate android.os.Build.VERSION_CODES#JELLY_BEAN o versioni precedenti. Le app destinate a una versione successiva a android.os.Build.VERSION_CODES#JELLY_BEAN quelle ancora vulnerabili se l'app viene eseguita in un dispositivo che esegue Android precedente alla 4.2. Il modo più sicuro per usare questo metodo è la destinazione android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 e garantire che il metodo venga chiamato solo quando è in esecuzione in Android 4.2 o versione successiva. Con queste versioni precedenti, JavaScript potrebbe usare la reflection per accedere ai campi pubblici di un oggetto inserito. L'uso di questo metodo in un controllo WebView contenente contenuto non attendibile potrebbe consentire a un utente malintenzionato di modificare l'applicazione host in modi imprevisti, eseguendo codice Java con le autorizzazioni dell'applicazione host. Usare estrema attenzione quando si usa questo metodo in un WebView che potrebbe contenere contenuto non attendibile.</li><li> JavaScript interagisce con l'oggetto Java in un thread privato e in background di questo WebView. È quindi necessario prestare attenzione per mantenere la thread safety. </li><li> Poiché l'oggetto è esposto a tutti i fotogrammi, qualsiasi frame potrebbe ottenere il nome dell'oggetto e chiamare metodi su di esso. Non esiste alcun modo per indicare l'origine del frame chiamante dal lato app, quindi l'app non deve presupporre che il chiamante sia attendibile, a meno che l'app non possa garantire che nessun contenuto di terze parti venga mai caricato in WebView anche all'interno di un iframe.</li><li> I campi dell'oggetto Java non sono accessibili.</li><li> Per le applicazioni destinate al livello android.os.Build.VERSION_CODES#LOLLIPOP API e versioni successive, i metodi degli oggetti Java inseriti sono enumerabili da JavaScript.</li></ul>

Documentazione java per android.webkit.WebView.addJavascriptInterface(java.lang.Object, java.lang.String).

Le parti di questa pagina sono modifiche basate sul lavoro creato e condiviso dal progetto Open Source Android e usato in base ai termini descritti nella licenza Creative Commons 2.5 Attribuzione.

Si applica a