WebView.AddJavascriptInterface(Object, String) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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>
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.