Opera tarayıcısı üzerinde jquery & prototype kütüphanelerinin kullanımı sırasında yükseklik ve genişlik değerlerinin yanlış hesaplanması

Bir projemizde jquery 1.4.2 ve prototype 1.6.2 sürümlerini bir ara kullanmak zorunda kalabiliriz. İki kütüphaneyi bir arada kullandığımızda Opera içinde bir elemanın yükseklik yada genişlik değerini öğrenmeye çalıştığımızda almış olduğumuz değerin yanlış hesaplandığını görüceksiniz. Eğer her iki kütüphanenin daha eski sürümlerini kullanıyorsanz bu problem ile karşılaşmamanız normal.

Problemin çözümü için kütüphane dosyalarında ufak değişiklikler yapmamız gerekiyor. Problemler kütüphane sahiplerine bildirilmiş ve sanırım bir sonraki sürümlerinde çözülmüş olacaktır.

Gelelim bu problemi nasıl çözüceğimize;

Bu problemi iki farklı yöntem kullanarak çözebiliyoruz. Fakat yöntemlerden biri başka problemleride meydana getirebileceğini düşündüğümden en sağlam çözüm olacağını düşündüğüm yöntemden bahsediyor olucam.

Jquery kütüphanemizin developer’lar için hazırlanmış olan versiyonunu indiriyoruz. Daha sonra return (“scrollTo” in elem && elem.document) ? // does it walk and quack like a window? kod bloğunu bularak bu kod bloğunu return (“scrollTo” in elem && elem.document && !elem.parentNode) ? // does it walk and quack like a window? ile değiştiriyoruz. Tabiki developer sürümünün boyutu yüksek olduğundan bu sürümünü sıkıştırarak kullanmak isteyebilirsiniz. Burada yardımınıza Closure Compiler yetişiyor. Yapmanız gereken tek şey http://closure-compiler.appspot.com/home sitesine girmek ve sol taraftaki alana kod bloğunu yapıştırıp Compile düğmesine basmak. Daha sonra sağ taraftaki sonucu kopyalayarak yolumuza devam edebiliriz.

İlgili makaleler

Jquery ve Prototype javascript kütüphaneleri birlikte kullanmak için dikkat edilmesi gereken kurallar.

Günümüzdeki web projelerinde çoğu zaman birden fazla javascript kütüphanesi ile çalışmak zorunda kalabiliyoruz. Javascript kütüphanelerinden günümüzde en çok kullanılan ise Jquery ve Prototype. Bu yetenekli ikiliyi beraber kullanmak istediğimizde birşeylerin düzgün gitmediğini göreceksiniz. Sorunun kaynağı sayfa içindeki nesnelere erişmek için kullandıkları ortak $() fonksiyonundan kaynaklanmaktadır.

Sorunun çözümü ise basit. Jquery kütüphanesini Prototype kütüphanesinden önce yüklemek ve daha sonra Jquery içindeki objelere erişmek için kullandığınız $() yöntemi yerine jQuery() yöntemi kullanmak sorununuzu tamamen çözecektir. Eğer jQuery ile yazılmış ekstra pluginler kullanıyorsanız bu script dosyaları içinde bulunan $() fonksiyonunu jQuery() ile değiştemeniz gerektiğinide unutmayın. Bu işlem ilk başlarda kafanızı karıştırsada ilerde başınızı ağrıtabilecek bir çok script hatasındanda kurtaracaktır. Önerdiğim yöntem sorunun çözümü için kullanabileceğiniz en sağlam yöntemdir.

İkinci bir alternatif olan Jquery tarafından sunulan jQuery.noConflict() fonksiyonu ise çoğu zaman işe yaramamaktadır ve yukarıdaki şekilde yapılandırmanızı ayarlarsanız bu fonksiyona kesinlikle ihtiyacınızda olmayacaktır.

IE8 Hakkında Bilmeniz Gerekenler

IE8 uyumluluk modu / IE8 tarayıcısının IE7 gibi render etmesini önlemek

IE8 içinde bir düğmeye basarak sayfamızı IE7 içinde çalışır gibi davranmasını sağlayabiliyoruz. Bu düğmeye tıklandığında sayfamız bundan sonra IE7 gibi davranmaya başlayacaktır. Peki, IE7 modunda sayfamızın IE8 gibi davranma şansı varmı? Maalesef bunu yapmak mümkün değil. Eğer sayfalarımızı IE8 içinde çalışacak şekilde tasarlamış ve kesinlikle bu modda çalışmasını sağlamak istiyorsak sayfamızın içine aşağıdaki parametreyi eklemek yeterli olacaktır.

<meta http-equiv="X-UA-Compatible" content="IE=8" />

Alternatif olarak, eğer tarayıcımızın IE7 gibi davranmasını istiyorsak aşağıdaki kodu eklememiz yeterli olacaktır.

<meta http-equiv="X-UA-Compatible" content="IE=7" />

Her ne kadar bu etiketleri ekleyerek IE8’in IE7 gibi davranmasını sağlasakta bu gerçek bir IE7 gibi olmayacaktır. Bu nedenden meta etiketlerinin kullanımını önermiyorum.

IE8 CSS Hack

IE8 için kullanacağım hack yöntemi star hack yöntemini kullarak IE7 ve daha düşük versiyonları hedef alır. Fakat eski IE tarayıcıları için daha farklı hack yöntemleride kullanılabilir.

p.myclass {
color: green;
*color: red;
}

body:last-child p.myclass {
color: blue;
}

Bu hack yöntemi kullanıldığında myclass sınıfına sahip paragraflar;