هل يؤثر اختيار DOCTYPE على DOM كما يراها كود جافا سكريبت؟

StackOverflow https://stackoverflow.com/questions/1403887

  •  05-07-2019
  •  | 
  •  

سؤال

نظرًا لمشروع قديم كبير يستخدم تقنيات ASP.NET وjavascript وcss وما إلى ذلك، كنت أتساءل عما إذا كان تغيير DOCTYPE لصفحات الويب، على سبيل المثال، من HTML 4.0 Transitional إلى XHTML 1.0 Transitional (أو العكس) بأي شكل من الأشكال يمكن أن يعطل وظائف جافا سكريبت لصفحات الويب.

هناك الكثير من المقالات والمناقشات حول كيفية تأثير DOCTYPES المختلفة على عرض (css) للصفحات، لكن يبدو أنني لا أستطيع العثور على أي شيء مماثل فيما يتعلق بموضوع كسر أي كود.

أبحث عن روابط لمقالات حول الأشياء التي يجب الانتباه إليها بشكل عام حتى أتمكن من اكتشاف المشكلات المحتملة بشكل أفضل في التعليمات البرمجية الحالية وتجنب خلق مشكلات عند كتابة تعليمات برمجية جديدة.

هل كانت مفيدة؟

المحلول

ما إذا كان تغيير DOCTYPE سيعطل أي وظائف جافا سكريبت يعتمد حقًا على مدى دفاعية تصميم هذه الوظائف :)

على سبيل المثال، عندما يتم تقديم المستند في وضع المراوغات, document.body (الجسم) يصبح ما يسمى "العنصر الجذري"؛عند تقديمه في الوضع القياسي، يكون هذا العنصر الجذر عادةً هو document.documentElement (لغة ​​البرمجة).وهذا تمييز كبير إلى حد ما.إذا كان البرنامج النصي الذي يحدد حجم شاشة المتصفح يستعلم دائمًا clientWidth/clientHeight خصائص خارج document.documentElement, ، فمن الواضح أنه سيتم الإبلاغ عن نتائج غير صحيحة في وضع المراوغات (بما أن IIRC، document.documentElement.clientWidth/clientHeight سيمثل أبعاد عنصر HTML، بدلاً من أبعاد الشاشة).

عادةً ما تحدد معظم مكتبات JS صراحةً ما إذا كان وضع quirksmode مدعومًا (نحن - Prototype.js - على سبيل المثال، لا ندعم وضع quirks).

بالحديث عن HTML مقابل XHTML, ، لكي يتمكن المتصفح من عرض المستند بتنسيق XHTML، يجب عليك أولاً عرضه باستخدام رأس "نوع المحتوى" المناسب (أي:التطبيق/xhtml+xml).إذا قمت بتغيير نوع المستند إلى XHTML فقط، ولكنك لا تزال تقدم المستند كـ "نص/html"، فإن معظم المتصفحات التي أعرفها سيستمر في تحليله (وعرضه) كمستند HTML.

لاحظ أنه حتى الآن، لا يفهم IE محتوى XHTML "الحقيقي"، ولهذا السبب يعد تقديم المستندات كنص/html (مع HTML4.01 doctype) طريقة موصى بها (ما لم يكن IE من بين المتصفحات المدعومة، بالطبع) .

فيما يتعلق بخصائص DOM في مستندات XHTML "الحقيقية"، فقد سمعت أن بعض الأشياء مثل document.write "لا تعمل" ويجب دائمًا تنفيذ الوصول إلى سمات العقدة عبر getAttribute/setAttribute (بدلاً من الوصول عبر أدوات الوصول إلى الخصائص الأبسط).IIRC، هناك أيضًا بعض المشكلات المتعلقة بـ innerHTML.

ربما يرجع نقص المعلومات حول DOM في مستندات XHTML "الحقيقية" إلى عدم تطبيقها عمليًا في المستندات/التطبيقات الخاصة بالويب العام (أي.نقص دعم IE لذلك).

نصائح أخرى

إذا كنت تستخدم DTD:

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

وبعد ذلك موقع الويب الخاص بك في وضع المراوغات في IE والمعايير تقريبا وضع في المتصفحات الحديثة، ولأن XHTML 1.0 DTD الانتقالي قوات الصفحة لتكون في وضع المعايير سوف تكون هناك قضايا التخطيط والمشاكل المحتملة في جافا سكريبت (وخصوصا في IE) كما أن هناك بعض الاختلافات الهامة بين كيف يتم تقديم DOM في المراوغات مقابل المعايير.

ولكن إذا كان DTD HTML 4.01 يحتوي على معرف النظام:

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

وينبغي أن يكون بالفعل في وضع المعايير. يمكنك التحقق عن طريق الاستعلام "document.compatMode" في موقع الويب الخاص بك، وسوف نقول CSS1Compat "لو كان في المعايير خلاف ذلك" BackCompat "إذا كان في وضع المراوغات.

وأفترض أنك كنت على وشك أن يقضي نوع المحتوى من النص / HTML مع XHTML 1.0 الانتقالي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top