Re: [VE][79] Error Message Feedback

* .:  Stefano Bisetto  :. wrote:
>The "a" tag is correctly open. It's contained in a javascript
>so the validator doesn't recognize it.

The <script> and <style> elements in HTML 4 are very special elements.
Here is an example: 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<html> 
<head> 
  <title>...</title> 
  <script type="text/javascript"> 
    alert("Bj&ouml;rn"); 
  </script> 
</head> 
<body> 
  <p>...</p> 
</body> 
</html> 

If you load the document in a browser that supports scripting, it would
show you a message box containing "Bj&ouml;rn" rather than "Björn". This
is because the browser ignores markup inside the <script> element. Here
is another example: 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<html> 
<head> 
  <title>...</title> 
  <script type="text/javascript"> 
    alert("Comments are <!--NOT--> ignored!"); 
  </script> 
</head> 
<body> 
  <p>...</p> 
</body> 
</html> 

You will get a message box containing "Comments are <!--NOT--> ignored!"
for the same reason, markup is ignored. But the browser somehow needs to
know where the <script> element is finished. It was unfortunately not
possible to specify that everything up to </script> is considered part
of the script, instead the first occurence of </ followed by a letter
A-Za-z determines the end of the element. Here is an (illegal!) example:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<html> 
<head> 
  <title>...</title> 
</head> 
<body> 
  <script type="text/javascript"> 
    document.write("<p>...</p>"); 
  </script> 
</body> 
</html> 

In this case, the first occurence of </ followed by a letter would be
</p>! If you ignore the document.write() and ignore the <p> (remember,
markup is ignored inside the <script> element) you get something like 

  <script type="text/javascript">...</p>"); 
  </script> 

And </p> does not match </script>, the validator complains 

end tag for element "P" which is not open 
It isn't, is it? Remember that comments are ignored too, but let's have
a look at them again 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<html> 
<head> 
  <title>...</title> 
</head> 
<body> 
  <script type="text/javascript"><!-- 
    alert("--> BUH!"); 
  //--></script> 
</body> 
</html> 

The browser would present you a message box containing "--> BUH!". If it
had ignored comments you would not see the "BUH!", would you? But let's
do another (illegal!) example 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<html> 
<head> 
  <title>...</title> 
</head> 
<body> 
  <script type="text/javascript"><!-- 
    document.write("<p>...</p>"); 
  //--></script> 
</body> 
</html> 

So the <!-- gets ignored and the <p> gets ignored... then we've got
again 

  <script type="text/javascript">...</p>"); 
  //--></script> 

And </p> does not match </script>. As before. 

The following resources might also be helpful in this regard:

  * http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.2 
  * http://www.htmlhelp.com/tools/validator/problems.html#script

Received on Wednesday, 7 July 2004 21:46:14 UTC