Что является жизнеспособной альтернативой нестрогому тегу в XHTML?
Я кодирую сайт электронной коммерции, используя XHTML в visual studio. В настоящее время для создания страницы контактов я использую API Google, чтобы иметь возможность отображать местоположение магазина на интерактивной карте. Мой вопрос:
- В случае, если у пользователя отключен JS в браузере, как бы я показал статическое изображение местоположения, не используя скрытый тег, а он не совместим с XHTML?
До сих пор у меня есть это в нескольких других элементах в теге body, только показывая это, чтобы облегчить понимание вопроса:
<noscript><img src="map.png" class="map_location" /></noscript>
<div id=map></div>
который взаимодействует с файлом Javascript
function initMap() {
var wannabemarker = { lat: 53.273301, lng: -2.817487 };
var map = new google.maps.Map(document.getElementById('map'), {
center: wannabemarker,
zoom: 12
});
var marker = new google.maps.Marker({
position: wannabemarker,
map: map
});
}
Карта отлично работает как при включенном JS, так и на статическом изображении показано, выключен ли JS, но возникла ли ошибка проверки, и я должен заставить ее исчезнуть. Любая помощь будет любезно оценена.
Спасибо
1 ответ
Первое, на что стоит обратить внимание, это то, что вы явно не используете XHTML, так как атрибут без кавычек в <div id=map>
сломал бы вашу страницу в браузерах, если бы вы были. Так что на самом деле вы используете обычный HTML, но, вероятно, думаете, что используете XHTML, потому что у вас есть XHTML-тип документа.
Поэтому лучший совет - просто прекратить это делать. использование <!DOCTYPE html>
вместо этого, и вы можете перестать беспокоиться о <noscript>
быть недействительным в XHTML.
Теперь в XHTML при правильном использовании недопустимый <noscript>
элемент не имеет никакого эффекта, но по умолчанию имеет стиль display: none
если JS включен и display:inline
если JS отключен. Обратите внимание, что в любом случае содержащийся img будет выбран с сервера, тогда как если вы используете обычный HTML, img не будет выбран, если JS включен.
Итак, в XHTML вы можете сделать что-то вроде
<script>
(function(){
var css = '.noscript { display:none }',
head = document.head || document.getElementsByTagName('head')[0],
style = document.createElement('style');
style.type = 'text/css';
if (style.styleSheet){
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
head.appendChild(style);
})();
</script>
<span class="noscript"><img src="map.png" class="map_location" alt="map" /></span>
и получить тот же эффект <noscript>
в XHTML, будучи действительным XHTML5.
(Спасибо Кристофу в статье Как создать тег