2016-10-12 5 views
1

Я использую блоггер, и я хочу создать свой собственный шаблон с нуля, поэтому я начал понимать самую основную структуру вещей. В моем путешествии я сталкиваюсь с вещами CDATA И я хотел протестировать этот код.Странное поведение CDATA в XHTML с JavaScript

<html> 
    <head> 
    <b:skin> 
     <![CDATA[ ]]> 
    </b:skin> 
    </head> 
    <body> 
    <b:section id='post'/> 
    <script> 
     if(true&&true) 
     alert("hello"); 
    </script> 
    </body> 
</html> 

Это дает мне ошибку и я знаю, что «&» должно быть «&», а потому, что это XHTML так я добавить CDATA мой код будет как этот

<html> 
    <head> 
    <b:skin> 
     <![CDATA[ ]]> 
    </b:skin> 
    </head> 
    <body> 
    <b:section id='post'/> 
    <script> 
     <![CDATA[ 
     if(true&&true) 
     alert("hello"); 
     ]]> 
    </script> 
    </body> 
</html> 

Теперь, когда я протестируйте его, чтобы предупреждающее сообщение не появилось, поэтому я помещаю // перед открытием и закрытием тега CDATA, и он работает. Я хочу понять, почему причина, по которой она работает с // и не без.

ответ

2

Blogger анализирует XML-шаблоны как XML, поэтому для работы с бэкэнд Blogger они должны быть действительными XML.

Однако, когда Blogger обслуживает результирующую страницу в браузере, он говорит, что Content-Type - text/html; charset=UTF-8 (что неверно, поскольку это XHTML (но см. Ниже)).

HTML и XHTML - это разные языки, поэтому, когда браузер анализирует XHTML как HTML, он ничего не делает с <![CDATA[ и просто передает его движку JavaScript.

<![CDATA[ недействителен JavaScript, поэтому это исключает исключение.

С помощью префикса // вы меняете недействительный код JavaScript на допустимый комментарий к строке JavaScript.


в сторону: XHTML и HTML достаточно похожи, что вы можете уйти с притворяясь ваш XHTML является HTML, если вы follow the compatibility guidelines.

+0

И поэтому, когда Blogger обслуживает результирующую страницу в браузере, он говорит, что Content-Type является text/html; charset = UTF-8, что неправильно? –

+1

@SeifEddineSlimene - я сомневаюсь, что есть * хорошая * причина. – Quentin

Смежные вопросы