Почему http://validator.w3.org оценивает страницу перед jQuery? альт теги?

У меня есть страница с динамически генерируемым слайд-шоу изображений через jQuery(). Изображения были загружены конечными пользователями в виде постов WordPress. Большинство из них были ленивыми и не включали никаких тэгов ALT.

Я запустил страницу с валидатором w3c и, естественно, жалуется, что каждому изображению нужен тэг ALT.

Поэтому я написал небольшой jQuery () для динамического добавления общего тега ALT для любого изображения, в котором его нет.

jQuery('img').each( function(i) 
  { 
  var v = jQuery(this).attr('alt');
    if( typeof(v) == 'undefined' )
      jQuery(this).attr('alt','generic alt tag');
} );

И хотя он появляется в источнике, валидатор -still- жалуется, что на изображениях нет тега ALT. Валидатор w3c каким-то образом "видит" страницу после ее загрузки, но - до того, как сработает jQuery? Или я что-то упускаю совершенно очевидно?

Есть ли способ заставить мой код срабатывать до проверки? И наконец, имеет ли это значение в реальном мире? IOW: есть ли другие сервисы (поисковые системы, программы чтения с экрана), которые могут не работать с этой техникой?

3 ответа

Служба проверки разметки проверяет разметку.

Он не генерирует DOM, выполняет JavaScript, а затем проверяет измененный DOM.

Вам нужно будет запустить JavaScript на сервере, чтобы увидеть эффекты в валидаторе.

Существуют ли другие службы (поисковые системы, программы чтения с экрана), которые могут не работать с этой техникой?

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

Поисковые системы вообще не будут выполнять JS вообще.

"И хотя это появляется на источнике"

Нет, это не так. Вы смотрите на текущее состояние DOM, если вместо этого вы посмотрите на фактический источник страницы, вы увидите его без добавленных атрибутов.

"Валидатор w3c каким-то образом" видит "страницу после загрузки, но - до того, как сработает jQuery?"

JQuery не работает вообще. Валидатор загружает страницу и проверяет HTML-код. Никакой Javascript не выполняется, и даже не создан DOM, который Jasvascript мог бы изменить.

Валидатор видит страницу так же, как это делают боты поисковой системы, они только загружают саму страницу и проверяют ее. Они не выполняют никакого Javascript, поэтому для целей SEO нет смысла добавлять alt атрибуты с использованием Javascript.

Звучит разумно для меня; Валидатор читает и проверяет ваш HTML, а не JS. Это имеет смысл, если предположить, что валидатор следует стандарту и набору правил для простой HTML-страницы. С этой точки зрения JS является расширением.

Кроме того, представьте, что произойдет, если пользователь с отключенным JS посетит вашу страницу - как это будет работать и выглядеть?

Если вы все еще хотите проверить полученный Html, что будет делать браузер, который обрабатывает JS, то я полагаю, что вы можете создать поддельную копию страницы и изменить ее так, чтобы она получала такой же результат, только в простом Html (т.е. удалить вся зависимость от JS только для целей тестирования).

С другой стороны - какой в ​​этом смысл? Я не уверен, что проверка страницы только ради подтверждения того, что она служит какой-либо цели. Если вы можете убедиться, что страница выглядит нормально в большинстве основных браузеров, и что она также работает на небольшом экране, то вы достигли чего-то гораздо более значимого, чем простая проверка W3C.

Другие вопросы по тегам