Почему мой скрипт проваливает валидацию W3C?
-
11-09-2019 - |
Вопрос
У меня есть этот кусок кода:
<script language="javascript" type="text/jscript">
document.write("<img src='http://dm.leadgenesys.com/jpgp.lgt?en=P.........TP_Q=&ur=' + escape(document.referrer) + '' border='0' alt='no alt' />");
</script>
И ... когда я пытаюсь подтвердить это, мне дали эту ошибку:
Тип документа не разрешает элемент "IMG" здесь
… Rer) + '"border =" 0 "alt =" no alt " />');
Элемент, указанный выше, был найден в контексте, где он не допускается. Это может означать, что у вас есть неправильно вложенные элементы, такие как элемент «стиля» в разделе «Тело» вместо «головы», или два элемента, которые перекрываются (что не допускается).
Есть идеи, что я могу сделать, чтобы сделать этот JavaScript W3C -совместимый?
Решение
Просто: не пытайтесь проверить свой JavaScript как HTML.
Вы можете сделать это несколькими способами ... но лучше всего перенести его в отдельный файл JS, а затем либо вызовите его из короткого скрипта
<body>
...
<script type="text/javascript" language="javascript">WriteImage();</script>
...
</body>
... или еще лучше, канава document.write()
полностью и манипулируйте DOM после того, как он загрузился.
Смотрите также: Несоблавный JavaScript
Другие советы
Еще один способ заставить замолчать валидатор ...
Поместите это так:
<script type="text/javascript">
/* <![CDATA[ */
your_javascript_here("<" + ... ;
/* ]]> */
</script>
Часть CDATA должно быть достаточно для валидатора, комментарии / * стиля * / предназначены для более старых браузеров, которые не распознают тег CDATA (в противном случае он сломал бы JavaScript).
Как это
<script>
<!--
var i = null;
if ((i/0) == 12)
alert("whooo! pack your things, as it's starting to rain cats and dogs!");
--><script>
Видите, что содержание «скрипта» находится внутри «HTML Comments»?
У тебя, вероятно, есть твой <script>
элемент в вашем <head>
, так что по сути вы пытаетесь создать <img>
В главе вашего документа, который не работает. Вам нужно поместить сценарий в <body>
.
Однако я бы порекомендовал вас Добавить элемент через DOM Вместо этого, потому что у вас будет меньше шансов столкнуться с такими проблемами.
Это часть стандарта HTML4. Ты должен сбежать "
<SCRIPT type="text/javascript">
document.write ("<EM>This will work<\/EM>")
</SCRIPT>
Другое решение, и, вероятно, лучше, - переместить код JS во внешних файлах.
document.write("<" + "img … /" + ">");
Или же:
document.write("\x3Cimg … /\x3E");