क्या सीडीएए टैग कभी स्क्रिप्ट टैग में आवश्यक हैं और यदि ऐसा है तो कब?
दूसरे शब्दों में, यह कब और कहाँ है:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
इसके लिए बेहतर:
<script type="text/javascript">
...code...
</script>
क्या सीडीएए टैग कभी स्क्रिप्ट टैग में आवश्यक हैं और यदि ऐसा है तो कब?
दूसरे शब्दों में, यह कब और कहाँ है:
<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>
इसके लिए बेहतर:
<script type="text/javascript">
...code...
</script>
जवाबों:
एक CDATA खंड की आवश्यकता है यदि आप XML के रूप में पार्स करने के लिए अपने दस्तावेज़ की जरूरत है (उदाहरण के लिए एक XHTML पेज XML के रूप में व्याख्या की है जब) और आप शाब्दिक लिखने के लिए सक्षम होना चाहते हैं i<10और a && bके बजाय i<10औरa && b , एक्सएचटीएमएल पार्स चरित्र डेटा के रूप में जावा स्क्रिप्ट कोड को पार्स के रूप में डिफ़ॉल्ट रूप से चरित्र डेटा के विपरीत। यह उन लिपियों के साथ कोई समस्या नहीं है जो बाहरी स्रोत फ़ाइलों में संग्रहीत हैं, लेकिन एक्सएचटीएमएल में किसी भी इनलाइन जावास्क्रिप्ट के लिए आप शायद सीडीएटीए अनुभाग का उपयोग करना चाहेंगे।
ध्यान दें कि कई एक्सएचटीएमएल पेजों को एक्सएमएल के रूप में पार्स करने का इरादा नहीं था, जिस स्थिति में यह एक मुद्दा नहीं होगा।
विषय पर एक अच्छा लिखने के लिए, https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm देखें
&और <पात्रों को, आपको सीडीएटीए अनुभाग की आवश्यकता नहीं है; यह HTML और XHTML दोनों में ठीक काम करेगा। आप बाहरी लिपियों में सभी महत्वपूर्ण कोड डालकर और उदाहरण के लिए इनलाइन स्क्रिप्ट का उपयोग करके आसानी से इसे प्राप्त कर सकते हैं। आरंभ चर (भागने &/ <करने के लिए \x26/ \x3Cस्ट्रिंग शाब्दिक अगर आप की जरूरत है)।
जब ब्राउज़र मार्कअप को XML के रूप में मानते हैं:
<script>
<![CDATA[
...code...
]]>
</script>
जब ब्राउज़र मार्कअप को HTML मानते हैं:
<script>
...code...
</script>
जब ब्राउज़र मार्कअप को HTML मानते हैं और आप चाहते हैं कि आपका XHTML 1.0 मार्कअप (उदाहरण के लिए) मान्य हो।
<script>
//<![CDATA[
...code...
//]]>
</script>
/* ... */क्योंकि अन्यथा यदि लाइन ब्रेक हटा दिए जाते हैं, तो कोड टूट जाएगा
एक 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टैग किसी भी अन्य टैग से बेहतर नहीं है। विशेष रूप से, एक स्क्रिप्ट नोड में गैर-टेक्स्ट चाइल्ड नोड्स हो सकते हैं, जिन्हें " <" द्वारा ट्रिगर किया गया है ; और " &" चिन्ह एक वर्ण इकाई को दर्शाता है।
तो, XHTML में यह संभव नहीं है:
<script>
if (a<b && c<d) {
alert('Hooray');
}
</script>
इसके चारों ओर काम करने के लिए, आप पूरी स्क्रिप्ट को एक CDATAसेक्शन में लपेट सकते हैं । यह पार्सर को बताता है: 'इस खंड में, " <" और " &" को नियंत्रण वर्णों के रूप में न मानें ।' जावास्क्रिप्ट इंजन को " <![CDATA[" और " ]]>" निशान की व्याख्या करने से रोकने के लिए , आप उन्हें टिप्पणियों में लपेट सकते हैं।
यदि आपकी स्क्रिप्ट में कोई " <" या " &" नहीं है, तो आपको किसी CDATAभी अनुभाग की आवश्यकता नहीं है।
</ स्क्रिप्ट स्क्रिप्ट खराब है।
<script>var b = "<b>bold</b>";</script>मान्य करने में विफल रहा, लेकिन आपके उत्तर को पढ़ने और <script>var b = "<b>bold<\/b>";</script>इसे निर्धारित करने के लिए बदलने के बाद ।
मूल रूप से यह एक दस्तावेज लिखने की अनुमति है जो एक्सएचटीएमएल और एचटीएमएल दोनों है। समस्या यह है कि XHTML के भीतर, XML पार्सर स्क्रिप्ट टैग में &, <,> वर्णों की व्याख्या करेगा और XML पार्सिंग त्रुटि का कारण होगा। तो, आप अपने जावास्क्रिप्ट को संस्थाओं के साथ लिख सकते हैं, जैसे:
if (a > b) alert('hello world');
लेकिन यह अव्यावहारिक है। इससे भी बड़ी समस्या यह है कि यदि आप HTML में पेज को पढ़ते हैं, तो टैग स्क्रिप्ट को 'डिफ़ॉल्ट रूप से CDATA' माना जाता है, और ऐसे जावास्क्रिप्ट नहीं चलेगा। इसलिए, यदि आप चाहते हैं कि एक ही पृष्ठ XHTML और HTML पार्सर दोनों का उपयोग करके ठीक हो, तो आपको स्क्रिप्ट को XHTML में CDATA तत्व में संलग्न करना होगा, लेकिन इसे HTML में संलग्न नहीं करना चाहिए।
यह ट्रिक एक जावास्क्रिप्ट टिप्पणी के रूप में सीडीएटीए तत्व की शुरुआत को चिह्नित करती है; HTML में जावास्क्रिप्ट पार्सर CDATA टैग को अनदेखा करता है (यह एक टिप्पणी है)। एक्सएचटीएमएल में, एक्सएमएल पार्सर (जो जावास्क्रिप्ट से पहले चलाया जाता है) इसका पता लगाता है और सीडीएटीए के अंत तक बाकी का इलाज करता है।
यह एक एक्स (एचटी) एमएल बात है। जब आप जावास्क्रिप्ट की तरह <और >भीतर प्रतीकों का उपयोग करते हैं , जैसे दो पूर्णांकों की तुलना करने के लिए, तो इसे XML की तरह पार्स करना होगा, इस प्रकार वे एक टैग की शुरुआत या अंत के रूप में चिह्नित होंगे।
सीडीएटीए का अर्थ है कि निम्न पंक्तियाँ (सब कुछ अप करने के ]]>लिए एक्सएमएल नहीं है और इस तरह उस तरह से पार्स नहीं किया जाना चाहिए।
करो नहीं HTML4 में CDATA का उपयोग, लेकिन आप चाहिए XHTML में CDATA का उपयोग करें और चाहिए अगर आप <और> की तरह नहीं छोड़ा जाएगा प्रतीकों एक्सएमएल में CDATA का उपयोग करें।
यह सुनिश्चित करने के लिए कि एक्सएचटीएमएल सत्यापन सही ढंग से काम करता है, जब आपके पास बाहरी संदर्भ के बजाय जावास्क्रिप्ट आपके पृष्ठ में एम्बेडेड होता है।
XHTML के लिए आवश्यक है कि आपका पृष्ठ XML मार्कअप आवश्यकताओं के अनुरूप हो। चूंकि जावास्क्रिप्ट में विशेष अर्थ वाले अक्षर हो सकते हैं, इसलिए आपको यह सुनिश्चित करने के लिए सीडीएटीए में लपेटना होगा कि सत्यापन इसे विकृत नहीं करता है।
वेब पर HTML पृष्ठों के साथ आप आवश्यक जावास्क्रिप्ट को टैग और टैग के बीच शामिल कर सकते हैं। जब आप अपने वेब पेज पर HTML को मान्य करते हैं, तो जावास्क्रिप्ट सामग्री को सीडीएटीए (चरित्र डेटा) माना जाता है जिसे इसलिए सत्यापनकर्ता द्वारा अनदेखा किया जाता है। यदि आप अपने वेब पेज को स्थापित करने में अधिक हाल के एक्सएचटीएमएल मानकों का पालन करते हैं तो यह सच नहीं है। XHTML के साथ स्क्रिप्ट टैग के बीच कोड को PCDATA (पार्स चरित्र वर्ण) माना जाता है जो इसलिए सत्यापनकर्ता द्वारा संसाधित किया जाता है।
इस वजह से, आप अपने वेब पेज पर 'अपने वेब पेज को तोड़ने' के बिना जावास्क्रिप्ट के बीच जावास्क्रिप्ट को शामिल नहीं कर सकते (कम से कम जहां तक सत्यापनकर्ता का संबंध है)।
आप यहाँ CDATA के बारे में और XHTML के बारे में अधिक जान सकते हैं ।
CDATA इंगित करता है कि भीतर की सामग्री XML नहीं है।
यहाँ विकिपीडिया पर एक स्पष्टीकरण दिया गया है
जब आप सख्त एक्सएचटीएमएल अनुपालन के लिए जा रहे हैं, तो आपको सीडीएटीए की आवश्यकता है ताकि कम और एम्परसेंड को अमान्य वर्णों के रूप में चिह्नित न किया जाए।
किसी भी XML बोली में CDATA आवश्यक है, क्योंकि XML नोड के भीतर पाठ को जावास्क्रिप्ट के रूप में मूल्यांकन करने से पहले एक बाल तत्व के रूप में माना जाता है। यही वजह भी है कि जेएसएलआईएनटी ने< चरित्र के बारे में शिकायत की ।
संदर्भ
जब आप इसे सत्यापित करना चाहते हैं (XML / XHTML में - धन्यवाद, लोरेन सहगल )।
इस तरह पुराने ब्राउज़र जावास्क्रिप्ट कोड को पार्स नहीं करते और पेज नहीं टूटता।
पीछे की संगतता। निसंदेह, यह प्यारी है।