Quirksmode.org/Nesne kontrolü

Ceviz Viki sitesinden

Git ve: kullan, ara

This page has been copied from http://quirksmode.org/js/support.html for permitted translation purposes.

Quirksmode.org yazıları : Tanışalım | Javascript Yerleşimi | Nesne kontrolü | İfadeler | Tarayıcı tespiti

Detaylı içindekiler tabloları için : Genel içindekiler tablosu | Javascript bölümünün içindekiler tablosu


Konu başlıkları

Nesne Denetimi

Bazı tarayıcıların belli bir metodu veya özelliği desteklemediğini aklınızdan çıkarmamalısınız. Eğer böyle bir kod kullanmak isterseniz öncelikle kullanmak istediğiniz metodun veya özelliğin ziyaretçinizin tarayıcısı tarafından desteklenip desteklenmediğini kontrol etmelisiniz. Bu sayfa bu işi nasıl yapacağınızı açıklamaktadır.

Tarayıcı Tespiti - Hayır

Herhangi bir tarayıcının kodunuzda kullandığınız nesneleri destekleyip desteklemediğini öğrenmek isterseniz tarayıcı tespiti yapmalısınız(!). Emin olabilirsiniz ki bazı tarayıcılar kodunuzu desteklerken bazı tarayıcılar desteklemez.

Tarayıcı tespiti ziyaretçileriniz %90 ı için yeterliyken bazı tarayıcılar kodlarınızı doğru yorumlayamayabilirler. Sonuç olarak ziyaretçileriniz bir hata mesajıyla karşılaşır veya betiğiniz(script) ihtiyaç duyulduğu zaman çalıştırılamaz.

Örnek Olay : mouseovers

Eski bir örnek olay herşeyi açıklayacaktır. Bu örnek şu günlerde yayınlanan bir çok örnekten farklı olabilir ama ilkeleri hala geçerli.

Şu bilinen bir gerçek ki Internet Explorer 3 mouseovers betikleri(script) için yaşamsal derecede önemli olan document.images dizisini desteklemez. Bu yüzden Explorer 3 de betik(script) çalışmaya başlamadan betiğin çalışmasını engellemek zorunda kalırız. Eğer ziyaretçi sizin sayfanızı Explorer 3 ile görüntülüyorsa tarayıcı tespiti yapıp kodlarınızın çalışmasını engellemek çözüm olabilir.

Bununla birlikte, çoğu OS de Netscape 2 de document.images dizisini desteklemez.Eğer tarayıcı tespitini sadece Explorer 3 için yapıyorsanız, Netscape 2 kullanan ziyaretçileriniz yardımcı olmaktan uzak hata bildirimleriyle karşılaşırlar.

Öyleyse neden tarayıcı denetimine Netscape 2 yi de dahil etmiyoruz? Malesef bu hiçbir şeyi çözmüyor.

Netscape 2 OS/2 de tamamen Netscape 3 gibidir ve mouseover efektlerini destekler. Yine de mouseover efektleri Netscape 2 de görünmez. Çünkü web geliştiriciler tarayıcı denetimi yapmıştır ve Netscape 2 nin mouseover efektlerini desteklemediğine karar vermişlerdir. Bu yüzden ellerinde iyi bir sebep olmaksızın ziyaretçilerine hakkettikleri interaktifliği sunmaz. İyi bir nesne denetimi bu tarz problemlerin önüne geçmelidir.

Son olarak bir çok tarayıcı kullanıcılarına tarayıcılarını diledikleri gibi özelleştirebilme , tarayıcı bilgilerini değiştirebilme gibi imkanlar sunar(konu hakkında tarayıcı tespiti sayfasına göz atın). Bu yüzden ziyaretçilerinizin tarayıcılarını doğru tespit edememeniz ve dolayısıyla onlara kolaylık sağlayacak işlevsellikten mahrum bırakmanız mümkündür.

Acaba Javascript versiyon bilgileri güvenilir mi ?

JavaScript Versiyonu Denetimi - Hayır

Javascript tasarlanırken Netscape, tarayıcıların geleceğinin farkındaydı bu yüzden eskisine göre daha fazla nesne desteklemeye başladı ama web geliştiricileri eski ve yeni tarayıcıları kontrol etmeliydi.

Asıl plana göre Javascript versiyon numaraları kontrol edilecekti. Bu gibi sonradan eklenen nesneler sadece javascript 1.x versiyonları tarafından desteklenecekti ve <script> tagıyla beraber kullanılan versiyon bilgisi sayesinde o versiyondaki nesneleri desteklemeyen tarayıcılar kodu çalıştırmayacaktı.

Bununla birlikte Microsoft' un piyasaya girmesiyle bu fikir unutuldu. Netscape 4 ve Explorer 4 tarayıcılarının her ikisinin de JavaScript 1.2 yi desteklemesine rağmen, bu JavaScript 1.2 ler aynı değildi. Bu olaylarla birlikte versiyon bilgileri kullanılmayan bir nesne denetim yöntemi haline geldi.

Bu yüzden Javascript versiyon numaralarını kullanmamalısınız.

Nesne Denetimi - Evet

Bunların yerine kullanmak istediğimiz özelliğin tarayıcı tarafından desteklenip desteklenmediğine bakabiliriz. Şimdi mouseovers örneğimize devam edelim. Bu betik(script) document.images dizisinin üstünden çalışıyor. Bu yüzden öncelikle tarayıcının bu diziyi destekleyip desteklemediğini kontrol etmeliyiz. Bu işi şu kodla yapacağız.

if (document.images)
{
//document.images dizisiyle bir şeyler yap.
}

Artık tarayıcıların mouseover metodunu destekleyip desteklemediğini öğrenmek için güvenilir bir metodunuz var. If bloğu document.images dizisinin var olup olmadığını kontrol edecek. Eğer varsa true dönecek ve betik(script) çalıştırılacak. Eğer yoksa false dönecek ve betik(script) çalıştırılmayacak.

Sık kıllanılan bir başka denetim ise window.focus içindir. Bu bir metodtur(Javascripte yapmasını söylediğiniz bir komut). Eğer bu metodu kullanmak istersek, öncelikle tarayıcının bu metodu destekleyip desteklemediğini kontrol etmeliyiz.

Bu işi doğru yapmak için parantez kullanmamalıyız. Yani;

if (window.focus)

Bu kodun anlamı : "focus methodu destekleniyorsa ..." dır.

if (window.focus())

Bu kodun anlamı : "focus methodunu kullan ve başarabilirsen ..." dir ve focus metodunun desteklendiğini varsayar. Eğer desteklenmiyorsa bu kod bazı hatalara sebep olur. Aslına bakarsanız parantezler focus komutunu çalıştırır ve bu olay şu durumda istediğimiz birşey değildir. Bu yüzden biz parantezler olmadan kontrol edeceğiz.***(see if it exists)*** ve sadece tarayıcılar denetimi geçebilirse parantezleri kullanıp komutu çalıştıracağız.

if (window.focus) window.focus()

Son olarak;

Eğer document.images dizisini kullanmak istiyorsanız öncelikle desteklenip desteklenmediğini kontrol etmelisiniz. Eğer focus metodunu window üzerinde kullanmak istiyorsanız öncelikle desteklenip desteklenmediğini kontrol etmelisiniz.

Eğer her zaman nesne denetimini yaparsanız betikleriniz(script) bazı tarayıcılarda çalışmasa bile hiçbir zaman hata vermez.

(Bu sayfa desteklenmeyen özelliklerin birkaçını kullanmaktadır. ***Since these examples are no longer relevant I put them on their own page, which is no longer maintained.***)

Kişisel araçlar