it-swarm-tr.com

Bir script etiketinde CDATA bölümü ne zaman gereklidir?

CDATA etiketleri komut dosyası etiketlerinde ve gerekliyse ne zaman gerekli midir?

Başka bir deyişle, bu ne zaman ve nerede:

<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>

bu tercih edilir:

<script type="text/javascript">
...code...
</script>
875
brad

Belgenizin XML olarak ayrıştırılması gerekiyorsa (örneğin, bir XHTML sayfası XML olarak yorumlandığında) ve i<10 yerine değişmez a && b ve i&lt;10 yazabilmek istiyorsanız bir CDATA bölümü gerekir. a &amp;&amp; b, XHTML, JavaScript kodunu, varsayılan olarak karakter verilerinin aksine, ayrıştırılmış karakter verileri olarak ayrıştırır. Bu, dış kaynak dosyalarında depolanan komut dosyalarıyla ilgili bir sorun değildir, ancak XHTML'deki herhangi bir satır içi JavaScript için muhtemelen bir CDATA bölümü kullanmak isteyeceksiniz.

Birçok XHTML sayfasının hiçbir zaman XML olarak ayrıştırılmayacağını, bu durumda bir sorun olmayacağını unutmayın.

Konuyla ilgili iyi bir yazı için bakınız https://web.archive.org/web/20140304083226/http://javascript.about.com/library/blxhtml.htm

568
Michael Ridley

Tarayıcılar biçimlendirmeyi XML olarak kabul ettiğinde:

<script>
<![CDATA[
    ...code...
]]>
</script>

Tarayıcılar biçimlendirmeyi HTML olarak kabul ettiğinde:

<script>
    ...code...
</script>

Tarayıcılar biçimlendirmeyi HTML olarak kabul ettiğinde ve XHTML 1.0 biçimlendirmenizin (örneğin) doğrulanmasını istediğinizde.

<script>
//<![CDATA[
    ...code...
//]]>
</script>
231
Shadow2531

HTML

Bir HTML ayrıştırıcısı, <script> ve </script> arasındaki her şeyi betiğin bir parçası olarak ele alır. Bazı uygulamaların doğru bir kapanış etiketine bile ihtiyacı yoktur; teknik özelliklere 'e göre doğru olan "</" adresinde script yorumlamasını durdururlar..

Güncelleme HTML5’te ve mevcut tarayıcılarda artık durum böyle değil.

Bu nedenle, HTML’de, bu mümkün değil mümkün:

<script>
var x = '</script>';
alert(x)
</script>

CDATA bölümünde hiç bir etkisi yoktur . Bu yüzden yazmak gerekir

var x = '<' + '/script>'; // or
var x = '<\/script>';

veya benzeri.

Bu aynı zamanda text/html işlevi gören XHTML dosyaları için de geçerlidir. (IE, XML içerik türlerini desteklemediğinden, bu çoğunlukla doğrudur.)

XML

XML'de farklı kurallar uygulanır. (IE olmayan) tarayıcıların, yalnızca XHMTL belgesine bir XML içerik türüyle sunulması durumunda bir XML ayrıştırıcı kullandığını unutmayın.

XML ayrıştırıcısına, script etiketi diğer etiketlerden daha iyi değildir. Özellikle, bir komut dosyası düğümü, "<" ile tetiklenen metin olmayan alt düğümler içerebilir; ve bir "&" işareti bir karakter varlığını belirtir.

Bu nedenle, XHTML'de bu mümkün değil mümkün:

<script>
if (a<b && c<d) {
    alert('Hooray');
}
</script>

Bu soruna geçici bir çözüm bulmak için, komut dosyasının tamamını CDATA bölümüne sarabilirsiniz. Bu, ayrıştırıcıya şunları söyler: 'Bu bölümde, "<" ve "&" öğelerini kontrol karakterleri olarak ele almaz .' JavaScript motorunun "<![CDATA[" ve "]]>" işaretlerini yorumlamasını engellemek için bunları yorumlara sarabilirsiniz.

Komut dosyanızda "<" veya "&" bulunmuyorsa, yine de CDATA bölümüne gerek yoktur.

121
user123444555621

Temel olarak, hem XHTML hem de HTML olan bir belge yazmaya izin vermektir. Sorun, XHTML'de, XML ayrıştırıcısının script etiketindeki &, <,> karakterlerini yorumlaması ve XML ayrıştırma hatasına neden olmasıdır. Böylece, JavaScript'inizi varlıklarla yazabilirsiniz, örneğin:

if (a &gt; b) alert('hello world');

Ancak bu pratik değildir. Daha büyük sorun, sayfayı HTML olarak okursanız, script etiketinin 'varsayılan olarak' CDATA olduğu kabul edilir ve bu tür JavaScript çalışmaz. Bu nedenle, aynı sayfanın hem XHTML hem de HTML ayrıştırıcıları kullanılarak kullanılmasını istiyorsanız, script etiketini XHTML içindeki CDATA öğesinin içine koymanız, ancak HTML'yi eklemenin ETMEMESİ gerekir.

Bu numara, bir CDATA öğesinin başlangıcını JavaScript yorumu olarak işaretler; HTML’de JavaScript ayrıştırıcısı CDATA etiketini yoksayar (bu bir yorum). XHTML'de, XML ayrıştırıcısı (JavaScript'ten önce çalıştırılır) onu algılar ve geri kalanı CDATA'nın sonuna kadar CDATA olarak değerlendirir.

30
ondra

Bu bir X (HT) ML olayı. JavaScript içerisinde < ve > gibi semboller kullandığınızda, ör. iki tamsayının karşılaştırılması için bunun XML gibi ayrıştırılması gerekir, bu nedenle bir etiketin başlangıcı veya sonu olarak işaretlenirler.

CDATA, aşağıdaki satırların (]]> 'a kadar olan her şeyin XML olmadığı ve bu şekilde ayrıştırılmaması gerektiği anlamına gelir).

23
Franz

HTML4'te CDATA kullanmayın, ancak XHTML’de CDATA kullanmalısınız ve , <ve> gibi görünmeyen sembolleriniz varsa, XML'de CDATA kullanmalıdır .

18
Loren Segal

Harici olarak başvuruda bulunmak yerine, sayfanıza JavaScript eklenmişse XHTML doğrulamasının doğru şekilde çalışmasını sağlamak.

XHTML, sayfanızın kesinlikle XML işaretleme gereksinimlerine uymasını gerektirir. JavaScript özel anlamı olan karakterler içerebileceğinden, doğrulamanın hatalı olarak işaretlenmediğinden emin olmak için CDATA'ya sarmanız gerekir.

Web’deki HTML sayfalarıyla sadece ve arasında yeterli JavaScript'i ekleyebilirsiniz. Web sayfanızdaki HTML'yi doğruladığınızda, JavaScript içeriği, doğrulayıcı tarafından göz ardı edilen CDATA (karakter verileri) olarak kabul edilir. Web sayfanızı oluştururken daha yeni XHTML standartlarını izlerseniz aynı durum geçerli değildir. XHTML ile kod etiketleri arasındaki kod PCDATA (ayrıştırılmış karakter verileri) olarak kabul edilir, bu nedenle validator tarafından işlenir.

Bu nedenle, web sayfanızı “kırmadan” (en azından onaylayıcıya gelince) sayfanızdaki komut dosyası etiketleri arasına JavaScript ekleyemezsiniz.

Burada CDATA hakkında daha fazla bilgi ve burada XHTML hakkında daha fazla bilgi öğrendiniz.

17
LBushkin

CDATA, içindeki içeriğin XML olmadığını gösterir.

İşte bir açıklama wikipedia

10
Alex Beardsley

Sıkı XHTML uyumluluğu için giderken, CDATA'ya gerekenden daha az gerekir ve ve işaretler geçersiz karakterler olarak işaretlenmez.

9
Chris Shaffer

xhtml doğrulaması sırasında xml hatalarını önlemek için.

8
gehsekky

CDATA, tarayıcıya metni olduğu gibi göstermesini ve HTML olarak göstermemesini söyler.

8
Ikaso

CDATA, içindeki içeriğin XML olmadığını gösterir.

6
Jim

Herhangi bir XML lehçesinde CDATA gereklidir, çünkü bir XML düğümü içindeki metin JavaScript olarak değerlendirilmeden önce alt öğe olarak kabul edilir. Bu aynı zamanda JSLint şikayet ediyor regexes içindeki < karakteri hakkında.

Referanslar

5
Paul Sweatte

Onaylamak istediğinizde (XML/XHTML içinde - teşekkürler, Loren Segal ).

2
ceejayoz

Bu şekilde eski tarayıcı Javascript kodunu ayrıştırmaz ve sayfa kırılmaz.

Geriye doğru uyumluluk. Seveceksin.

2
Tyler Carter