meb.gov.tr ve childNodes kullanımı

meb.gov.tr üzerindeki bazı sitelerin Opera üzerinde düzgün görüntülenmediği haberini aldım. Mesela aio.meb.gov.tr sitesinde menü ve içerik düzgün görüntülenmiyor. 

Sorunun araştırırken ilk karşılaştığım şey hata uçbirimindeki hatalar oldu. Javascript, bir XML dosyası üzerinde belli bir elemente ulaşmaya çalışıyor ancak o element bulunamadığı için hata meydana geliyordu. Biraz daha detayına girince elementlerin b isimli bir değişkenin değerine bağlı olarak çağrıldıklarını farkettim. Bu değişken ise beni sorunun kaynaklandığı yere götürdü. http://aio.meb.gov.tr/xmlAnasayfaLoader.js ve http://aio.meb.gov.tr/xmlMenuLoader.js dosyalarında browserKontrol() isimli birer fonksiyon tanımlanmış ve bu fonsiyon çağırılınca b isimli global bir değişkenin değeri değiştiriliyor. Eğer tarayıcı Internet Explorer ise 0 değerini, Netscape ise 1 değerini alıyor. Yani işin özeti tarayıcıya göre bir kontrol söz konusu.  

Bu kullanım ve b isimli değişken menü oluşturulurken, XML verisi okumada kullanılıyor, yani Opera’nın hata ürettiği yerde.  Tarayıcı kontrolünün yapılmasının ve bu b değişkenine ihtiyaç duyulmasının nedeni, açık web standartları ve Microsoft standartları arasındaki farklardan dolayıdır. Bu alandaki en önemli fark boşlukların ve yeni satırların nasıl değerlendirileceği üzerinedir. Microsoft Internet Explorer, XML dosyasındaki düğümler arası boşlukları ve yeni satırları önemsemezken, diğer tarayıcılar bunları yeni birer düğüm olarak görmekteler. Böylece bir elementin çocuk sayısı, ebeveyni o olan element sayısı, değişebilir.

Bir elementin childNodes özelliği, o elementin altında bulunan elementleri içeren bir dizidir aslında. Örnek olarak aşağıdaki bir kullanım W3C tarafından önerilen bir kullanım şeklidir.

Internet Explorer kullanıcıları yukarıdaki örneği farklı bir sonuçla görmektedirler. Meb’in bu sitesini hazırlayan web geliştiricileri bu uyumsuzluk problemini aşmak için tarayıcı kimliğine göre hareket etme kararı almışlardır, ancak bu her zaman faydalı bir çözüm değildir. Özellikle tarayıcı dünyasına yeni oyuncuların girdiği şu zamanlarda(tarayıcılar artık sadece masaüstü platformunda değiller).

Web geliştiricileri aşağıdaki gibi bir kod kullanarak bu problemi aşabilirlerdi. Bu aynı zamanda Mozilla’nın web geliştiricilerine önerdiği yöntem. Kod bakımını azaltan ve oldukça doğru çalışan bir yöntem.

Buradaki tek fark yazı ve yorumları içeren çocuk elementleri aşmak için nodeType kontrolü yapılmıştır. IE, diğer tarayıcılar gibi yazı içeriği ve yorum içerek elementleri alt bir çocuk element olarak algılamıyor. Bu düzen, Microsoft’un çalışmasını arzu ettiği şekilde.

Sitede bunun gibi 6 tane kullanım var. DOM üzerinde JavaScript ile yapılan işlemler genelde bir ağırlık yaratır ancak sitedeki uygulama bariz bir ağırlaşmaya sebep olacak kadar veri içermiyor. En nihayetinde üzerinde çalıştığımız xml dosyaları büyük boyutlu değil. nodeType kontrollerinin yapılması sitenin performansını pek de etkilemeyeceğini söyleyebiliriz. Açık Webli günler….

Kaynaklar