2010-01-30 2 views
2

Есть ли разница в < NoScript> Блок обработки страниц подается с MIME-типа текст/html по сравнению с теми, подается с MIME-типа приложение/XHTML + XML?<noscript> обработки в XML-документах

Насколько я заметил, блокнот для текст/html страницы не обрабатываются вообще, если JavaScript отключен в браузере. И что происходит для application/xhtml + xml страниц? Я подозреваю, что для таких страниц блок все еще анализируется, когда JavaScript отключен. Но я не нашел разъяснений по этому вопросу.

Может ли кто-нибудь указать мне соответствующий стандарт W3C или предоставить любое другое разъяснение?

PS. Ситуация, представляющая интерес, - это услуги подсчета посещений, которые используют < noscript> блок для отслеживания посетителей с отключенным JS. Если элементы (например, нулевого размера изображения) из < NoScript> блоки загружаются в любом случае, то такие услуги должны сломала :(

ответ

4

Лучшее описание, вероятно, один в проекте HTML5 здесь:. http://dev.w3.org/html5/spec/semantics.html#the-noscript-element

...

в текст/HTML, детали точно, что происходит не очень сложны Просто следуйте по ссылке выше нет смысла воспроизводить здесь

Для приложений/XHTML + XML, проект говорит:

элемент noscript не должен использоваться в документах XML.

Элемент noscript эффективен только в синтаксисе HTML, он не влияет на синтаксис XHTML.

Итак, в приложении/xhtml + xml содержимое noscript должно отображаться независимо от того, доступен ли скриптинг или нет. Конечно, если скрипт включен в, довольно просто использовать скрипт для удаления таких элементов из DOM.

КОРРЕКЦИЯ.

Дальнейшие исследования, что, как явствует из вышеприведенной цитаты, означает, что элемент noscript не влияет на парсинг .

В разделе XHTML здесь, http://dev.w3.org/html5/spec/the-xhtml-syntax.html#the-xhtml-syntax, проект говорит

Агент пользователя, как ожидается, чтобы скрыть NoScript элементы, для которых включена функция сценариев, независимо от правил CSS.

Итак, как вы говорите, когда скриптинг включен, элемент noscript скрывает его содержимое. Однако, это все, что он делает, и изображения загружаются в любом случае. Кроме того, я попытался это:

<html xml:lang="en-GB" xmlns="http://www.w3.org/1999/xhtml" lang="en-GB"> 
    <head> 
    <title>Test</title> 
    </head> 
    <body> 
    <p>Test 1</p> 
    <noscript id="ns"> 
     <p>Test 2</p> 
     <script type="text/javascript"> 
     document.getElementById("ns").parentNode.removeChild(document.getElementById("ns")); 
     </script> 
     <img src="test.gif" alt="test"/> 
    </noscript> 
    </body> 
</html> 

И хотя NoScript узел удаляется из йот, Firefox по-прежнему пытался загрузить изображение.

+0

Я не использую HTML5 doctype, но XHTML 1.1.Наверное, это имеет значение, не так ли? Пожалуйста, исправьте меня, если я ошибаюсь. Я немного экспериментировал и могу утверждать, что в приложении/xhtml + xml содержимое noscript НЕ отображается, если JS отключен, но все еще загружен (есть соответствующий HTTP-запрос/ответ). Все современные браузеры не соблюдают стандарты при работе с XML-документами? Если я удалю noscript (или его содержимое) из DOM (когда JS включен) будет ли его содержимое загружаться до их удаления? –

+0

Доктрипы не имеют никакого значения. Но см. Мою коррекцию выше. – Alohci

+0

Спасибо за ваш ответ быстрым и удобным примером. Чтобы добавить немного, я нашел следующее в http://wiki.whatwg.org/wiki/HTML_vs._XHTML (на самом деле, он утверждает то же, что и ваш ответ, но без каких-либо ссылок): «В HTML, если скрипт включен, элемент noscript анализируется как элемент CDATA. Если сценарий отключен, он анализируется как обычный элемент. В XHTML элемент всегда анализируется как обычный элемент. <..> « –