Histori dialog JavaScript
JavaScript diperkenalkan pada tahun 1995, dan di versi pertama JavaScript,
ada metode pada objek jendela bernama
alert()
,
confirm()
,
dan prompt()
.
Meski cocok dengan JavaScript pada saat itu, API sinkronnya bermasalah bagi browser modern. Karena mesin JavaScript perlu dijeda hingga respons pengguna diperoleh, dialog JavaScript merupakan modal aplikasi. Dan karena dialog adalah modal aplikasi, dialog tersebut biasanya (dan sayangnya) digunakan untuk merusak pengguna.
Oleh karena itu, tim Chromium sangat menyarankan agar Anda tidak menggunakan dialog JavaScript.
Alternatif
Ada banyak opsi untuk penggantian dialog.
Ada beberapa pilihan untuk alert()/confirm()/prompt()
. Untuk memberi tahu pengguna tentang peristiwa (misalnya, kalender situs), Notifications API harus digunakan. Untuk mendapatkan input pengguna, elemen <dialog>
HTML
harus digunakan. Untuk bukti konsep XSS, console.log(document.origin)
devtool dapat digunakan.
Adapun onbeforeunload
, perlu diperhatikan bahwa sudah tidak dapat diandalkan. Seperti
yang ditunjukkan oleh Ilya Grigorik,
“Anda tidak dapat mengandalkan peristiwa pagehide
, beforeunload
, dan unload
untuk diaktifkan di
platform seluler”. Jika perlu menyimpan status, Anda harus menggunakan
Page Visibility API.
Perubahan
Kemampuan halaman untuk menentukan string onbeforeunload
telah
dihapus di Chrome 51.
(Ini juga dihapus oleh Safari yang dimulai dengan Safari 9.1 dan di Firefox 4.)
Dialog alert()/confirm()/prompt()
telah berubah dari modal aplikasi menjadi ditutup saat tabnya dialihkan. Perubahan ini
terjadi di semua saluran pada awal Mei 2017.
Dialog beforeunload
memerlukan gestur pengguna di halaman agar dapat ditampilkan
mulai di Chrome 60.
(Hal ini tidak mengubah pengiriman peristiwa beforeunload
.) Hal ini selaras dengan Chromium, yang membuat perubahan ini di Firefox 44.
Menampilkan dialog alert()/confirm()/prompt()
saat dalam layar penuh akan menyebabkan
layar penuh hilang
mulai dari Chrome 61.
Dialog prompt()
tidak mengaktifkan tabnya. Jika prompt()
dipanggil dari
tab latar belakang, panggilan akan segera ditampilkan dan tidak ada dialog yang ditampilkan.
Perubahan ini
berlaku di semua saluran pada awal Mei 2017.
Dialog alert()
tidak mengaktifkan tabnya. Jika alert()
dipanggil dari
tab latar belakang, panggilan akan segera ditampilkan. Tab ditandai dengan indikator
dan pengguna akan melihat dialog saat beralih ke tab. Perubahan perilaku ini
terlihat
mulai Chrome 64.
Dialog confirm()
tidak mengaktifkan tabnya. Jika confirm()
dipanggil dari
tab latar belakang, panggilan akan segera ditampilkan dan tidak ada dialog yang ditampilkan.
Perubahan perilaku ini terlihat
mulai Chrome 69.
Karena perubahan ini, jika situs Anda menggunakan dialog, sebaiknya Anda beralih menggunakan alternatif yang disebutkan sebelumnya sehingga hal ini tidak akan memengaruhi Anda.