JavaScript iletişim kutularında Chromium politikası

JavaScript iletişim kutularının geçmişi

JavaScript, 1995 yılında kullanıma sunulmuştur ve JavaScript'in ilk sürümünde, alert(), confirm() ve prompt() adlı pencere nesnesindeki yöntemler kullanılmıştır.

Bunlar zamanın JavaScript'ine uyum sağlasa da eşzamanlı API'leri modern tarayıcılar için oldukça sorun teşkil ediyor. JavaScript motorunun kullanıcı yanıtı alınana kadar duraklatılması gerektiği için JavaScript iletişim kutuları app-modal niteliktedir. Ayrıca iletişim kutuları uygulamalarla bağlantılı olduğundan genellikle (ne yazık ki) kullanıcılarımıza zarar yaralamak için kullanılırlar.

Bu nedenle Chromium ekibi, JavaScript iletişim kutularını kullanmamanızı önemle tavsiye eder.

Alternatifler

İletişim kutusu değiştirme için birçok seçenek vardır.

alert()/confirm()/prompt() için birkaç seçenek var. Kullanıcıyı etkinlikler (ör. takvim siteleri) hakkında bilgilendirmek için Bildirimler API'si kullanılmalıdır. Kullanıcı girişi elde etmek için HTML <dialog> öğesi kullanılmalıdır. XSS kavram kanıtlamaları için devtool'un console.log(document.origin) özelliği kullanılabilir.

onbeforeunload açısından, zaten güvenilir olmadığı unutulmamalıdır. Ilya Grigorik'in dettiği gibi, "Mobil platformlarda etkinleşmek için pagehide, beforeunload ve unload etkinliklerine güvenemezsiniz." Durumu kaydetmeniz gerekiyorsa Page Visibility API'yi kullanmalısınız.

Değişiklikler

Bir sayfanın onbeforeunload dizesini belirtme özelliği Chrome 51'de kaldırıldı. (Ayrıca, Safari 9.1 ve Firefox 4'ten itibaren Safari tarafından da kaldırılmıştır.)

Uygulama modu olan alert()/confirm()/prompt() iletişim kutuları, sekmeleri değiştirildiğinde kapatılacak şekilde değiştirildi. Bu değişiklik, Mayıs 2017'nin başında tüm kanallar genelinde gerçekleşmiştir.

beforeunload iletişim kutularının Chrome 60'tan itibaren gösterilebilmesi için sayfada bir kullanıcı hareketi gerekir. (Bu işlem, beforeunload etkinliğinin dağıtımını değiştirmez.) Bu yaklaşım, Chromium'u Firefox ile uyumlu hale getirmektedir. Bu nedenle, bu değişiklik Firefox 44 ile yapılmıştır.

alert()/confirm()/prompt() iletişim kutusunun tam ekranda gösterilmesi Chrome 61'den itibaren tam ekranın kaybedilmesine neden olur.

prompt() iletişim kutuları sekmesini etkinleştirmiyor. prompt() bir arka plan sekmesinden çağrılırsa çağrı hemen geri döner ve herhangi bir iletişim kutusu gösterilmez. Bu değişiklik, Mayıs 2017'nin başında tüm kanallarda gerçekleşti.

alert() iletişim kutuları sekmesini etkinleştirmiyor. alert() bir arka plan sekmesinden çağrılırsa çağrı hemen geri döner. Sekme bir göstergeyle işaretlenmiştir ve kullanıcı bu sekmeye geçtiğinde iletişim kutusunu görür. Bu davranış değişikliği Chrome 64 sürümünden itibaren görülmektedir.

confirm() iletişim kutuları sekmesini etkinleştirmiyor. confirm() bir arka plan sekmesinden çağrılırsa çağrı hemen geri döner ve herhangi bir iletişim kutusu gösterilmez. Bu davranış değişikliği Chrome 69 sürümünden itibaren görülmektedir.

Bu değişiklikler nedeniyle, sitenizde iletişim kutuları kullanılıyorsa, sizi etkilememesi için yukarıda bahsedilen alternatifleri kullanmaya başlamanız önemle tavsiye edilir.