Почему мой скрипт не проходит проверку w3c? - PullRequest
2 голосов
/ 05 июня 2009

У меня есть этот кусок кода:

<script language="javascript" type="text/jscript">
  document.write("<img src='http://dm.leadgenesys.com/jpgp.lgt?en=P.........TP_Q=&amp;ur=' + escape(document.referrer) + ''  border='0' alt='no alt' />");
</script>

и ... когда я пытаюсь проверить это, мне выдается эта ошибка:

тип документа не допускает элемент "img" здесь

… rer) + '"border =" 0 "alt =" no alt " /> ');

Элемент, указанный выше, был найден в контекст, где это не разрешено. это может означать, что у вас неправильно вложенные элементы - такие как «стиль» элемент в разделе "тело" вместо внутри "головы" - или два элемента это перекрытие (что недопустимо).

Любая идея, что я могу сделать, чтобы сделать этот JavaScript w3c-совместимым?

Ответы [ 6 ]

5 голосов
/ 05 июня 2009

Еще один способ заставить замолчать валидатор ...

Поместите это так:

<script type="text/javascript">
/* <![CDATA[ */
your_javascript_here("<" + ... ;
/* ]]> */
</script> 

Часть CDATA должна быть достаточной для валидатора, комментарии в стиле / * предназначены для старых браузеров, которые не распознают тег CDATA (в противном случае это нарушило бы JavaScript).

5 голосов
/ 05 июня 2009

Простой: не пытайтесь проверять свой JavaScript как HTML.

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

<body>
...
<script type="text/javascript" language="javascript">WriteImage();</script>
...
</body>

... или, что еще лучше, полностью откажитесь от document.write() и управляйте DOM после его загрузки.

См. Также: Ненавязчивый JavaScript

2 голосов
/ 05 июня 2009

Как насчет

<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"?

2 голосов
/ 05 июня 2009

Возможно, у вас есть <script> элемент в вашем <head>, поэтому, по сути, вы пытаетесь создать <img> в заголовке документа, что не работает. Вам нужно поставить скрипт в <body>.

Однако я бы порекомендовал вам добавить элемент через DOM , потому что у вас меньше шансов столкнуться с такими проблемами.

1 голос
/ 05 июня 2009

Это часть стандарта HTML4. Вы должны избегать последовательностей "</", найденных внутри тегов SCRIPT. </p>

<SCRIPT type="text/javascript">
  document.write ("<EM>This will work<\/EM>")
</SCRIPT>

Другим решением, и, возможно, лучше, является перемещение кода JS во внешние файлы.

Ссылка

0 голосов
/ 05 июня 2009
document.write("<" + "img … /" + ">");

Или:

document.write("\x3Cimg … /\x3E");
...