Странное поведение CDATA в XHTML с JavaScript

#javascript #xhtml

#javascript #xhtml

Вопрос:

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

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

Это выдает мне ошибку, и я знаю, что вместо «amp;» должно быть «amp;», потому что это xhtml, поэтому я добавляю cdata, и мой код станет таким

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

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

Ответ №1:

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

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

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

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

Добавляя к нему префикс // , вы меняете недопустимый JavaScript на допустимый комментарий строки JavaScript.


кроме того: XHTML и HTML достаточно похожи, чтобы вам могло сойти с рук притворяться, что ваш XHTML является HTML, если вы будете следовать рекомендациям по совместимости.

Комментарии:

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