WebView.AddJavascriptInterface(Object, String) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menyuntikkan objek Java yang disediakan ke webView ini.
[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
Parameter
- object
- Object
objek Java untuk dimasukkan ke dalam konteks JavaScript WebView ini. null nilai diabaikan.
- name
- String
nama yang digunakan untuk mengekspos objek di JavaScript
- Atribut
Keterangan
Menyuntikkan objek Java yang disediakan ke webView ini. Objek disuntikkan ke semua bingkai halaman web, termasuk semua iframe, menggunakan nama yang disediakan. Ini memungkinkan metode objek Java diakses dari JavaScript. Untuk aplikasi yang ditargetkan ke tingkat android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 API ke atas, hanya metode publik yang dianotasi dengan android.webkit.JavascriptInterface yang dapat diakses dari JavaScript. Untuk aplikasi yang ditargetkan ke tingkat android.os.Build.VERSION_CODES#JELLY_BEAN API atau di bawah ini, semua metode publik (termasuk yang diwariskan) dapat diakses, lihat catatan keamanan penting di bawah ini untuk implikasi.
Perhatikan bahwa objek yang disuntikkan tidak akan muncul di JavaScript hingga halaman berikutnya (dimuat kembali). JavaScript harus diaktifkan sebelum menyuntikkan objek. Contohnya:
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> Metode ini dapat digunakan untuk memungkinkan JavaScript mengontrol aplikasi host. Ini adalah fitur yang kuat, tetapi juga menghadirkan risiko keamanan untuk penargetan android.os.Build.VERSION_CODES#JELLY_BEAN aplikasi atau yang lebih lama. Aplikasi yang menargetkan versi lebih lama dari android.os.Build.VERSION_CODES#JELLY_BEAN masih rentan jika aplikasi berjalan pada perangkat yang menjalankan Android lebih awal dari 4.2. Cara paling aman untuk menggunakan metode ini adalah dengan menargetkan android.os.Build.VERSION_CODES#JELLY_BEAN_MR1 dan untuk memastikan metode hanya dipanggil saat berjalan di Android 4.2 atau yang lebih baru. Dengan versi lama ini, JavaScript dapat menggunakan refleksi untuk mengakses bidang publik objek yang disuntikkan. Penggunaan metode ini dalam WebView yang berisi konten yang tidak tepercaya dapat memungkinkan penyerang memanipulasi aplikasi host dengan cara yang tidak diinginkan, menjalankan kode Java dengan izin aplikasi host. Gunakan perawatan ekstrem saat menggunakan metode ini dalam WebView yang dapat berisi konten yang tidak tepercaya.</li li><> JavaScript berinteraksi dengan objek Java pada utas latar belakang privat dari WebView ini. Oleh karena itu, diperlukan perawatan untuk menjaga keamanan utas. </li><li> Karena objek terekspos ke semua bingkai, bingkai apa pun bisa mendapatkan nama objek dan metode panggilan di atasnya. Tidak ada cara untuk memberi tahu asal bingkai panggilan dari sisi aplikasi, sehingga aplikasi tidak boleh berasumsi bahwa pemanggil dapat dipercaya kecuali aplikasi dapat menjamin bahwa tidak ada konten pihak ketiga yang pernah dimuat ke dalam WebView bahkan di dalam iframe.</li><> Bidang objek Java tidak dapat diakses.</li li>>< Untuk aplikasi yang ditargetkan ke tingkat android.os.Build.VERSION_CODES#LOLLIPOP API ke atas, metode objek Java yang disuntikkan dapat dijumlahkan dari JavaScript.</li></ul>
Bagian halaman ini adalah modifikasi berdasarkan pekerjaan yang dibuat dan dibagikan oleh Proyek Sumber Terbuka Android dan digunakan sesuai dengan istilah yang dijelaskan dalam Lisensi Atribusi Creative Commons 2.5.