Geliştiriciler için yeni bir özellik duyurusu yapıldığında genelde iki tepki olur: ya hemen denemek için sabırsızlanırız ya da "yine mi yeni bir şey?" diye iç geçiririz. Ancak WAI-ARIA 1.3 spesifikasyonu ile gelen ariaNotify() metodu, bu ikisinin de ötesinde bir heyecan yaratıyor. Çünkü bu, yıllardır çözüm bekleyen bir soruna nihayet zarif bir çözüm sunuyor. Peki nedir bu ariaNotify? Kısaca, ekran okuyuculara programatik olarak anlatım yaptırmanızı sağlayan bir yöntem. document.ariaNotify("Merhaba Dünya") dediğinizde, ekran okuyucu bu metni seslendiriyor. İşte bu kadar basit görünebilir, ancak arkasında yılların birikimi var.
Aslında bu tür bir anlatım ihtiyacı yeni değil. Daha önce ARIA'nın canlı bölgeleri (live regions) ile benzer bir şey yapmaya çalışıyorduk. Ancak canlı bölgeler, adı üstünde, DOM'da gerçekleşen değişikliklere tepki vermek için tasarlanmıştı. Yani bir elementin içeriği değiştiğinde, bu değişikliği ekran okuyucuya bildiriyorlardı. Sorun şu ki, birçok senaryoda sadece DOM değişikliği değil, görünürlük durumu veya başka bir etkileşim sonucu anlatım yapmak istiyoruz. İşte bu noktada canlı bölgeler yetersiz kalıyordu. Örneğin, bir butona tıkladığınızda ekranda bir bildirim beliriyor, ancak bu bildirim zaten DOM'da var, sadece görünür hale geliyor. Canlı bölgeler bu durumu algılamıyor çünkü DOM değişmiyor. İşte ariaNotify tam da bu boşluğu dolduruyor.
Canlı bölgelerin bir diğer sorunu da tarayıcı ve ekran okuyucu uyumsuzluklarıydı. Her ne kadar teoride aria-live="polite" veya aria-live="assertive" gibi değerlerle anlatımın önceliğini belirleyebiliyor olsak da, pratikte bu değerlerin nasıl yorumlandığı cihazdan cihaza değişiyordu. Ayrıca canlı bölgelerin çalışması için DOM'da önceden var olması gerekiyordu; sonradan eklenen canlı bölgeler genellikle ilk içeriklerini anlatmıyordu. Bu da geliştiricileri, görünmez canlı bölgeler oluşturup içeriklerini sürekli güncellemeye itiyordu. Yani aslında canlı bölgeler, amaçları dışında bir bildirim API'si olarak kullanılıyordu. Bu, ne temiz bir çözümdü ne de sürdürülebilir.
ariaNotify() işte bu kargaşayı ortadan kaldırmak için geliyor. Metot, iki parametre alıyor: birincisi anlatılacak metin, ikincisi isteğe bağlı bir yapılandırma nesnesi. Yapılandırma nesnesi ile anlatımın önceliğini (polite/assertive), anlatılacak metnin bir kısmını veya tamamını, hatta anlatımın ertelenip ertelenmeyeceğini belirleyebiliyorsunuz. Bu, canlı bölgelere göre çok daha esnek ve doğrudan bir kontrol sağlıyor. Üstelik metodu herhangi bir yerden çağırabiliyorsunuz; DOM'da bir elemente bağlı değil. Bu da onu, özellikle tek sayfa uygulamalar (SPA) ve dinamik içerikler için ideal kılıyor.
Ancak bu kadar güçlü bir araç, aynı zamanda büyük bir sorumluluk getiriyor. Ekran okuyucu kullanıcıları, anlatımın her zaman kontrollü ve anlamlı olmasını bekler. Gereksiz yere sürekli anlatım yapmak, kullanıcı deneyimini mahvedebilir. Bu nedenle ariaNotify()'u yalnızca gerçekten ihtiyaç duyulan durumlarda kullanmak kritik. Örneğin, bir form gönderildiğinde başarı mesajı, bir hata durumu, veya bir bildirim geldiğinde. Ama her tuşa basışta veya sayfa yüklendiğinde anlatım yapmak, kullanıcıyı rahatsız eder. Geliştiricilerin bu konuda dikkatli olması gerekiyor; aksi takdirde erişilebilirlik iyileştirmesi yaparken daha büyük sorunlara yol açabiliriz.
Peki, bu yeni metodu ne zaman kullanmalıyız? İlk kural: canlı bölgelerin yetersiz kaldığı durumlarda. Eğer anlatım yapmak istediğiniz olay, DOM değişikliğinden bağımsız olarak gerçekleşiyorsa (örneğin, bir zamanlayıcı, bir animasyon sonu, veya kullanıcı etkileşimi sonucu görünürlük değişikliği), ariaNotify() ideal. İkinci kural: anlatımın içeriğini tamamen kontrol etmek istediğinizde. Canlı bölgelerde, anlatım otomatik olarak değişen metni içerir; ancak bazen ek bağlam veya farklı bir ifade kullanmak isteyebilirsiniz. ariaNotify() ile istediğiniz metni doğrudan belirtebilirsiniz. Üçüncü kural: performans. Canlı bölgeler, DOM değişikliklerini sürekli izler ve bu da özellikle büyük sayfalarda performans sorunlarına yol açabilir. ariaNotify() ise yalnızca çağrıldığında çalışır, bu da daha verimlidir.
Sonuç olarak, ariaNotify() geliştiricilere büyük bir esneklik ve güç sunuyor. Ancak bu güç, beraberinde sorumluluk getiriyor. Doğru kullanıldığında, ekran okuyucu kullanıcıları için web deneyimini önemli ölçüde iyileştirebilir. Yanlış kullanıldığında ise, kullanıcıları bilgi kirliliğine boğabilir. Bu nedenle, her yeni araçta olduğu gibi, ariaNotify()'u da dikkatle ve yalnızca gerçekten ihtiyaç duyulduğunda kullanmalıyız. Unutmayın, erişilebilirlik bir lüks değil, bir gerekliliktir ve bu gerekliliği yerine getirirken kullanıcı deneyimini her zaman ön planda tutmalıyız.
Kaynak: css-tricks.com