Why won't <iframe> elements validate in HTML 4.01?

丶灬走出姿态 提交于 2019-12-12 12:28:48

问题


I was just checking to see if it was valid to put an <iframe> element inside a <noscript> element as a fall back for displaying dynamic content. It validated fine with the HTML 5 doctype, but for HTML 4.01, I get the following error:

Line 9, Column 35: element "IFRAME" undefined
<iframe name="test" src="test.htm"></iframe>

You have used the element named above in your document, but the document type you are using does not define an element of that name. This error is often caused by:

  • incorrect use of the "Strict" document type with a document that uses frames (e.g. you must use the "Frameset" document type to get the "" element),
  • by using vendor proprietary extensions such as "" or "" (this is usually fixed by using CSS to achieve the desired effect instead).
  • by using upper-case tags in XHTML (in XHTML attributes and elements must be all lower-case).

This is what I whittled the HTML down to:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
          "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
   <title>I AM YOUR DOCUMENT TITLE REPLACE ME</title>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
   <div>
     <iframe name="test" src="test.htm"></iframe>
   </div>
</body>
</html>

The <iframe> element is defined in the HTML 4.01 specification at the following URL: http://www.w3.org/TR/html401/present/frames.html#h-16.5.

It passes with a transitional doctype, so I guess my question is "Why is it disallowed in a strict doctype, even though it's defined in the specification?".


回答1:


"Why is it disallowed in a strict doctype, even though it's defined in the specification?

Lots of things are defined in the specification but not allowed in Strict. <font> springs to mind. These are the things that the developers of the specification considered in need of documenting, were in use in browsers in the day, but which should be transitioned away from.

I can think of two reasons why they might have thought that:

  • "Why do iframes suck?".
  • <iframe> does (in theory) little that can't be achieved with <object>



回答2:


iframe isn't included in html strict. For validation, try using the object element instead.

<object data="test.html" type="text/html"></object>

You should also add width and height attributes to the object element. Note, unlike iframes objects cannot be a target for any page links.

Unless for some reason you specifically need html4 strict validation, it's better to use the html5 doctype.



来源:https://stackoverflow.com/questions/4873502/why-wont-iframe-elements-validate-in-html-4-01

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!