جافاسكريبت - متى يكون قسم CDATA ضروريًا داخل وسم السكريبت؟
هل تعتبر وسوم CDATA ضرورية أحيانًا في وسوم السكريبت وإذا كان الأمر كذلك، متى؟
بمعنى آخر، متى وأين هذا:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
مفضل على هذا:
<script type="text/javascript">
...code...
</script>
الإجابة رقم 1
قسم CDATA مطلوب إذا كنت بحاجة إلى أن يتم تحليل مستندك كـ XML (على سبيل المثال عند تفسير صفحة XHTML كـ XML) وترغب في كتابة i<10 و a && b حرفيًا بدلاً من i<10 و a && b، لأن XHTML سيحلل كود JavaScript باعتباره بيانات محروفة محللة بدلاً من البيانات المحروفة بشكل افتراضي. هذه ليست مشكلة مع السكربتات المخزنة في ملفات مصدر خارجية، ولكن لأي كود JavaScript مضمن في XHTML ستحتاج على الأرجح إلى استخدام قسم CDATA.
لاحظ أن العديد من صفحات XHTML لم تكن مقصودة أبدًا ليتم تحليلها كـ XML، وفي هذه الحالة لن تكون هذه مشكلة.
للمقال الجيد حول الموضوع، انظر https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm
الإجابة رقم 2
عندما يتعامل المتصفحات مع الترميز كـ XML:
<script>
<![CDATA[
...code...
]]>
</script>
عندما يتعامل المتصفحات مع الترميز على أنه HTML:
<script>
...code...
</script>
عندما تتعامل المتصفحات مع الترميز بوصفه HTML وتريد أن يتحقق الترميز الخاص بك XHTML 1.0 (على سبيل المثال).
<script>
//<![CDATA[
...code...
//]]>
</script>
الإجابة رقم 3
إتش تي إم إل
سيقوم محلل HTML بمعاملة كل شيء بين <script> و </script> كجزء من البرنامج النصي. بعض التطبيقات لا تحتاج حتى إلى وسم إغلاق صحيح؛ فهي توقف تفسير البرنامج النصي عند ".</"، وهو ما يتوافق مع المواصفات
تحديث في HTML5، ومع المتصفحات الحالية، لم يعد الأمر كذلك.
لذلك، في HTML، هذا غير ممكن:
<script>
var x = '</script>';
alert(x)
</script>
قسم CDATA ليس له أي تأثير على الإطلاق. لهذا عليك أن تكتب
var x = '<' + '/script>'; // or
var x = '<\/script>';
أو ما شابه ذلك.
وينطبق هذا أيضًا على ملفات XHTML التي تُقدَّم كـ text/html. (نظرًا لأن IE لا يدعم أنواع محتوى XML، فإن هذا صحيح إلى حد كبير.)
إكس إم إل
في XML، تُطبَّق قواعد مختلفة. لاحظ أن المتصفحات (غير IE) تستخدم محلل XML فقط إذا تم تقديم مستند XHMTL بنوع محتوى XML.
بالنسبة لمحلل XML، فإن وسم script ليس أفضل من أي وسم آخر. على وجه الخصوص، قد يحتوي عقدة script على عقد فرعية غير نصية، يتم تشغيلها بواسطة "<"؛ وتشير علامة "&" إلى كيان حرفي.
لذا، في XHTML، هذا ليس ممكنًا:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
لتجاوز هذا، يمكنك تغليف البرنامج النصي بالكامل ضمن قسم CDATA. هذا يخبر المحلل: 'في هذا القسم، لا تتعامل مع "<" و "&" كأحرف تحكم.' لمنع محرك جافاسكريبت من تفسير علامات "<![CDATA[" و "]]>"، يمكنك تغليفها ضمن تعليقات.
إذا لم يحتوي نصك البرمجي على أي "<" أو "&", فلست بحاجة إلى قسم CDATA على أي حال.
الإجابة رقم 4
بشكل أساسي، هو السماح بكتابة مستند يكون كل من XHTML و HTML. المشكلة هي أنه داخل XHTML، سيقوم محلل XML بتفسير الحروف & و < و > في وسم script مما يسبب خطأ في تحليل XML. لذلك، يمكنك كتابة جافاسكريبت الخاصة بك باستخدام الكيانات، على سبيل المثال:
if (a > b) alert('hello world');
لكن هذا غير عملي. المشكلة الأكبر هي أنه إذا قمت بقراءة الصفحة بصيغة HTML، فإن الوسم script يُعتبر CDATA 'افتراضيًا'، ولن يعمل مثل هذا الجافاسكربت. لذلك، إذا كنت تريد أن تكون نفس الصفحة صحيحة عند استخدام محللات XHTML و HTML، تحتاج إلى إحاطة وسم script في عنصر CDATA في XHTML، ولكن لا تُحاط به في HTML.
تحدد هذه الحيلة بداية عنصر CDATA كتعليق في جافاسكريبت؛ في HTML، يتجاهل محلل جافاسكريبت الوسم CDATA (لأنه تعليق). في XHTML، يكتشف محلل XML (الذي يتم تشغيله قبل جافاسكريبت) ذلك ويعامل الباقي حتى نهاية CDATA كـ CDATA.
الإجابة رقم 5
إنها مسألة X(HT)ML. عندما تستخدم رموزًا مثل < و> داخل جافا سكريبت، على سبيل المثال لمقارنة عددين صحيحين، يجب تحليلها كـ XML، وبالتالي قد يتم اعتبارها كبداية أو نهاية لوسم.
تعني CDATA أن السطور التالية (كل شيء حتى ]]>) ليست XML وبالتالي لا يجب تحليلها بهذه الطريقة.
الإجابة رقم 6
لا تستخدم CDATA في HTML4 ولكن يجب أن تستخدم CDATA في XHTML ويجب عليك استخدام CDATA في XML إذا كان لديك رموز غير مهربة مثل < و>.
الإجابة رقم 7
إنه لضمان أن تعمل صحة XHTML بشكل صحيح عندما يكون لديك JavaScript مضمنًا في صفحتك، بدلاً من الإشارة إليه خارجيًا.
يتطلب XHTML أن تلتزم صفحتك بدقة بمتطلبات ترميز XML. نظرًا لأن JavaScript قد يحتوي على أحرف ذات معنى خاص، يجب عليك تغليفه في CDATA لضمان عدم اعتباره غير صالح أثناء التحقق من الصحة.
مع صفحات HTML على الويب، يمكنك ببساطة إدراج JavaScript المطلوبة بين علامتي و . عند التحقق من صحة HTML على صفحة الويب الخاصة بك، يعتبر محتوى JavaScript بيانات أحرف (CDATA) والتي يتم تجاهلها من قبل أداة التحقق. الأمر نفسه غير صحيح إذا اتبعت معايير XHTML الأحدث في إعداد صفحة الويب الخاصة بك. مع XHTML، يعتبر الكود بين علامتي script بيانات أحرف محللة (PCDATA) والتي يتم معالجتها من قبل أداة التحقق.
بسبب هذا، لا يمكنك ببساطة تضمين جافا سكريبت بين وسوم السكريبت على صفحتك دون 'كسر' صفحتك على الويب (على الأقل من منظور المدقق).
يمكنك معرفة المزيد عن CDATA هنا، والمزيد عن XHTML هنا.
الإجابة رقم 8
تشير CDATA إلى أن المحتوى داخلها ليس XML.
إليك شرح على ويكيبيديا
