Geçtiğimiz hafta bir kodlama seansı sırasında kaç kez bildirime baktığımı saydım: 34 kez. Ancak bunların sadece dördü gerçekten dikkatimi gerektiren içeriğe sahipti.
Bu verilerden yola çıkarak, Serious Notification adını verdiğim bir Chrome uzantısı geliştirdim. Uzantı, tarayıcı bildirimlerini yalnızca belirlediğiniz anahtar kelimelerle eşleştiğinde sesli olarak okur. Örneğin "hata" yazdığınızda sadece derleme hatalarını duyarsınız. "acil" olarak ayarladığınızda ise gerçekten önemli olanları yakalarsınız. Diğer tüm bildirimler ise sessiz kalır. Temel fonksiyonelliği sadece bir hafta sonu süren projeyi hayata geçirmek için harcadığım süre kadar basit görünüyordu — ancak Manifest V3 mimarisinin altında yatan iki önemli kısıtlama, geliştirme sürecini beklenmedik bir şekilde karmaşık hale getirdi.
Bildirim API'sini Yakalamak Neden Mümkün Değil?
İlk planım son derece basitti: Chrome bildirimlerini dinleyecek, bunları anahtar kelimelerle karşılaştıracak ve eşleşenleri sesli olarak okuyacaktım. Bunun için bir içerik betiği kullanmak mantıklı görünüyordu. Ancak Chrome'un Notification yapıcısının (constructor) tamamen farklı bir mantıkla çalıştığını fark ettim.
Chrome'da bir web sitesi new Notification("Mesajınız var") şeklinde bildirim oluşturduğunda, bu işlem aslında sayfanın kendi JavaScript bağlamında (window.Notification) gerçekleşir. Manifest V3 altında çalışan standart içerik betikleri ise izole edilmiş bir dünyada (ISOLATED world) çalışır. Bu izole ortam, DOM'u paylaşsa da tamamen ayrı bir JavaScript bağlamına sahiptir. Dolayısıyla içerik betiğiniz DOM'u okuyabilir, ancak sayfanın asıl window.Notification yapıcısına erişemez. Bildirim tetiklendiğinde dinleyebilirsiniz, ancak öncesinde müdahale edemezsiniz.
Ana Dünyada Çalışan Betikler: Çözümün İlk Adımı
Manifest V3, içerik betiklerine "ana dünya" (MAIN world) adı verilen bir seçenek sundu. `
Yapay zeka özeti
Bir Chrome uzantısıyla tarayıcı bildirimlerini belirlediğiniz anahtar kelimelerle filtreleyerek yalnızca önemlilerinin sesli okunmasını sağladım. Fark ettim ki Manifest V3 mimarisindeki iki kritik kısıtlama, projeyi hayata geçirmeyi zorlaştırıyordu. Detaylar burada.