2009-09-10 18 views
5

ASP.NET, javascript, css, vb. Teknolojileri kullanan büyük bir eski proje göz önüne alındığında, web sayfalarının DOCTYPE'sini değiştirip değiştirmediğini merak ettim, HTML 4.0 Transitional'dan XHTML 1.0 Transitional'a (veya diğer yoldan) herhangi bir şekilde web sayfalarının javascript işlevlerini bozabilir.DOCTYPE seçimi javascript kodu tarafından görüldüğü gibi DOM'yi etkiler mi?

Farklı DOCTYPES'lerin sayfaların (css) görüntülerini nasıl etkilediğine dair birçok makale ve tartışma vardır, ancak herhangi bir kodun kırılması konusunda benzer bir şey bulamıyorum.

Mevcut koddaki olası sorunları daha iyi tespit edebilmek ve yeni kod yazarken sorun yaratmamak için genel olarak dikkat etmeniz gereken şeylerle ilgili makalelere bağlantılar arıyorum.

cevap

5

değişen DOCTYPE gerçekten bağlıdır herhangi bir javascript fonksiyonları kıracak olsun bu fonksiyonlar nasıl tasarlandığı savunmaya :)

belge tuhaflıklar modu, document.body (VÜCUT) işlenir Örneğin

, bir sözde "kök olur öğe "; standart modda işlendiğinde, bu kök eleman genellikle document.documentElement (HTML) olur. Bu oldukça önemli bir ayrımdır. Tarayıcı ekranının boyutunu belirleyen bir komut dosyası her zaman document.documentElement'un clientWidth/clientHeight özelliklerini sorgularsa, hatalı sonuçları hatalı modlarda bildirecektir (çünkü, IIRC, document.documentElement.clientWidth/clientHeight, ekran öğelerinden ziyade HTML öğesinin boyutlarını temsil eder).

JS kitaplıklarının çoğu, genellikle quirksmode'un desteklenip desteklenmediğini açıkça belirtir (biz - Prototype.js - örneğin, quirks modunu desteklemiyoruz).

Konuşma tarayıcısı için sırayla XHTML vs HTML ait

XHTML belgeyi işlemek için, sen her şeyden önce doğru "Content-tipi" başlığının (yani uygulama/xhtml + xml) ile hizmet etmeliyiz. Yalnızca XHTML için bir doctype değiştirirseniz, ancak yine de "text/html" gibi bir belgeye sahipseniz, çoğu tarayıcı 'u bildiğim tarayıcıları HTML belgeyi olarak ayrıştırmaya devam edecektir.

Bugüne kadar, IE'nin "gerçek" XHTML içeriğini anlayamadığını unutmayın; bu nedenle, HTML/HTML (HTML4.01 doctype ile) belgelerin sunulması önerilen yoldur (IE, desteklenen tarayıcılar arasında değilse) , tabii ki).

Bildiğim kadarıyla "gerçek" XHTML belgelerinde DOM özelikleri, ben document.write gibi bazı şeyler "çalışmıyor" ve duydum olarak erişen düğüm özellikleri her zaman getAttribute/setAttribute yoluyla yapılmalıdır ki (daha doğrusu basit özellik erişimcilerine aracılığıyla yerine) . IIRC, innerHTML ile bazı sorunlar da vardır. "Gerçek" XHTML belgelerinde DOM ile ilgili bilgi eksikliği, genel web belgeleri/uygulamalarındaki (yani, IE'nin bunun için destek eksikliği) pratik olmamasından kaynaklanmaktadır.

+0

Bazı belge modlarında dom öğeleri Object.prototype öğesinden devralmaz ve bu nedenle özel yöntemlerle veya özelliklerle genişletilemezler ... – inf3rno

1

Eğer DTD kullanıyorsanız:

sonra
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

siteniz tuhaflıklar IE modu ve modern tarayıcılarda neredeyse standartlar modu ve de xhtml 1.0 bağlantı dtd olmak sayfasını zorlar çünkü Standartlar modu, Javascript'teki (özellikle IE'de) yerleşim sorunları ve potansiyel konular olacaktır. Çünkü DOM, standartlara karşı quirks cinsinden nasıl işlendiğiyle arasında bazı önemli farklılıklar vardır.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

Zaten standartlar modunda olmalı: HTML 4.01 DTD sistem kimliğini içeriyor Ancak eğer

. Sitenizdeki 'document.compatMode' sorgulayarak doğrulayabilirsiniz, aksi takdirde 'CSS1Compat' standartlarında ise 'BackCompat' ise quirks modunda.

XHTML 1.0 Transitional ile bir Content-Type text/html sunacağınızı varsayıyorum.

+0

Kısmi/tam doctype sorununu doğruladım. Bir kısmi/tam xhtml 1.0 doctype için benzer bir test yaptım ve her ikisi de ve Standartlar Uyumluluk modunda, yani kısmi xhtml doctype, sayfayı HTML 4.01 bir örneğinde olduğu gibi quirks moduna zorlamaz. Garip. –

İlgili konular