Избавляемся о ошибок xHTML-валидации при использовании JavaScript, Flash, <noindex>, CSS
Я являюсь сторонником веб-стандартов, но, к сожалению, по тем или иным причинам не всегда их соблюдаю (кстати сказать, когда я верстал таблицами, то о стандартах и понятия не имел :). Как вы наверняка уже знаете, в настоящее время в Рунете проходит конкурс сайтов WebHiTech, целью которого является распространение современных веб-стандартов в русскоязычном сегменте сети.
В общем-то, у меня было желание подать заявку, но по определенным требованиям блог не подходит для участия. Тем не менее, само существование данного конкурса явилось очень хорошим стимулом для того, чтобы я, наконец, привел код моего блога в соответствие со стандартом xHTML. И я этому, безусловно, очень рад.
Хочется отметить, что, как правило, имеет место следующая ситуация. Если «чистая» верстка (аля PSD → HTML) проходит xHTML-валидацию без вопросов, то после «натяжки» на движок (для примера, тот же WordPress), появляется множество различных недочетов, которые делаю страницы сайта невалидными.
А «портят» наши страницы в основном следующие 4 вещи:
- JavaScript.
- Глобальные CSS, размещаемые в заголовке документа.
- Flash.
- Несуществующий по стандартам тег
<noindex>
, придуманный Яндексом.
Отказаться от каждого из этих пунктов часто не представляется возможным, но, благо, существуют обходные пути, которые позволяют привести эти 4 элемента к виду, соответствующему стандартам.
Об этом и хочу поведать ниже.
JavaScript
Во-первых, тег, обозначающий JavaScript, часто имеет следующий вид:
<script>
код скрипта
</script>
А должно быть так:
<script type="text/javascript">
код скрипта
</script>
Во-вторых, чтобы скрипт окончательно прошел валидацию, необходимо использовать следующие специальные комментарии:
<script type="text/javascript">
<!--//<![CDATA[
код скрипта
//]]>-->
</script>
Глобальные CSS
Здесь все по аналогии с предыдущим пунктом:
<style type="text/css">
/* <![CDATA[ */
.style {margin: 0; padding: 0}
/* ]]> */
</style>
Flash
Решение для флеша я нашел у Максима Покровского, за что говорю ему: «Спасибо!».
<object type="application/x-shockwave-flash" data="flash.swf" width="468" height="60">
<param name="flashvars" value="link=http://site.com/" />
<param name="movie" value="flash.swf" />
<param name="quality" value="high" />
</object>
Данный код не позволяет автоматически устанавливать флеш-плейер, но ведь нам важнее валидность, не правда ли?
Тег <noindex>
За решение этой задачи «Большое спасибо!» отправляется к NickSpring.
Оформить этот тег необходимо следующим образом:
<del class="hide"><![CDATA[<noindex>]]></del>
то, что необходимо запретить индексировать Яндексу
<del class="hide"><![CDATA[</noindex>]]></del>
А в файл стилей добавить:
.hide {display: none}
P.S. В результате применения вышеизложенного материала я избавился от 300 с лишним ошибок валидации и теперь мой блога соответствует стандарту xHTML 1.0 Transitional. Не исключено, что некоторые страницы блога все-таки не пройдут валидацию, но это уже результат действия какого-либо из плагинов.
Комментарии (33)
А почему сразу не в Strict ?
Денис, а в чём глубокий смысл Strict, если страница отдаётся как text/html?
Я когда-то читал об этом, но в голове данный момент не осел :) По крайней мере, для всех скриптов блога пришлось применять CDATA.
Не отрицаю. Ну и пусть :)
Окей, учту. Спасибо.
CodeColorer. Жаль, что давно не обновляется.
К сожалению, это проблематично. Тогда придется редактировать кучу постов.
Dimox, подправленная версия CodeColorer.
:-) могу поправить плагин, чтобы он понимал синтаксис CodeColorer.
Владимир, хотел бы уточнить пару вопросов: что вы подправили в CodeColorer и в чем смысл перехода на Codebox?
Обновил движок (GeSHi), добавил парочку языков и подкорректировал, хм, грамматику в существующих (это касается (X)HTML — распознавание условных комментариев и т.п.). Ну и генерируемая разметка теперь валидна, судя по тестам.
Судя по коду, CodeColorer тот же CodeBox — у Эрика и Дмитрия в коде плагина так много общего. Но у CodeBox функциональность больше :-)
Как вчера оказалось, этих вещей пять. Пятая — кривая реализация функции wpautop. Для тех, кто пользуются WYSIWYG, это не сильно заметно. А в обыкновенном редакторе это всё видно.
Например,
будет «любезно» преобразован в
Об этом (и как это исправить) я еще напишу.
Ясно. Тогда большое спасибо за обновление и буду ждать вашу версию CodeBox, которая без проблем встанет вместо CodeColorer.
Я вообще не знаю, что это такое, впервые вижу :) Именно в расчете на то, что возможны еще какие-то причины, я в статье использовал слова «в основном» ;)
Самое опасное в плане баговости на валидаторе — это размещение сторонних счетчиков, кнопочек, баннеров и прочих пузомерок.
Они на 99% невалидны, поэтому приходится постоянно что-то дописывать/переписывать самому. Ручками и трезвой головой.
А я в конкурсе рискнул поучаствовать. Отправил заявку, но пока тишина…
С Ноиндексом все понятно, а вот с флеш проблема.
Да вообще забить на валидность — главное, чтобы отображалось корректно.
[m.k], в чем с флеш проблема?
Спасибо, оcoбенно за скрипт и за сообщение о конкурсе, может сделаю специально под него какой-нибудь сайт, то есть сверстаю специально под него.
Хотя и не пользуюсь noindex, но за подсказку спасибо.
спасибо, теперь буду знать как проавильно оформить свой код
для флэша валидно и кросбраузерно
Да — согласен , сначала проверяешь пустой сайт = есть валидация .
Потом стоит добавить счетчик или банер = сразу проблемы появляются.
Поразительно! Неужели у кого-то бывают проблемы с валидацией из-за стилей в head? Мне приходит в голову только один возможный случай: если применяются expressions. Зато валидатор ругается на скрипт, в котором применяется нечто вроде document.write(‘…’). Поэтому для вставки элементов скриптом я предпочитаю createElement.
Мега респект.. Люди! Я даже о таком не слышал. Спасибо! Полез у себя в блоге исправлять такие ошибки..
Спасибо за статейку.
Меня тоже мучает вопрос насчёт , и статейку NickSpring тоже читал, но вроде, там в комментариях было выяснено, что после этих манипуляций появляются проблемы с работой .
Решение по noindex кривое. Валидация невалидными средствами. М.б. лучше посмотреть в сторону расширения XHTML за счет dtd?
а 451 ошибка на этой странице и одинадцать предупреждений — это как?
Посмотрите, когда была написана эта статья, и какое сегодня число. За это время много чего изменилось.
согласна.. )
спасибо за блог, радует. а у вас есть подписка в твиттере, не люблю в rss читать
Есть — http://twitter.com/Dimox_ru
отлично, подписываюсь )