为啥 <iframe> 元素在 HTML 4.01 中无效?

Posted

技术标签:

【中文标题】为啥 <iframe> 元素在 HTML 4.01 中无效?【英文标题】:Why won't <iframe> elements validate in HTML 4.01?为什么 <iframe> 元素在 HTML 4.01 中无效? 【发布时间】:2011-06-19 21:34:28 【问题描述】:

我只是在检查将&lt;iframe&gt; 元素放在&lt;noscript&gt; 元素中作为显示动态内容的后备元素是否有效。它使用 html 5 doctype 验证良好,但对于 HTML 4.01,我收到以下错误:

第 9 行,第 35 列:元素“IFRAME”未定义

您在文档中使用了上述元素,但您使用的文档类型未定义该名称的元素。此错误通常由以下原因引起:

将“Strict”文档类型错误地用于使用框架的文档(例如,您必须使用“Frameset”文档类型来获取“”元素), 通过使用供应商专有扩展,例如“”或“”(通常通过使用 CSS 来解决此问题,以实现所需的效果)。 通过在 XHTML 中使用大写标签(在 XHTML 中属性和元素必须全部小写)。

这就是我将 HTML 缩减为:

<!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>

&lt;iframe&gt; 元素在 HTML 4.01 规范中定义,网址如下:http://www.w3.org/TR/html401/present/frames.html#h-16.5。

它以过渡文档类型通过,所以我想我的问题是“为什么在严格的文档类型中不允许它,即使它在规范中定义?”。

【问题讨论】:

可能在严格的 DTD 中无效。你能搬到过渡期吗? @Craig:根据 W3Schools 的说法,这没问题,但这也是我要尝试的第一件事。 @Craig:你说得对,它通过过渡 DTD 传递 - 那么为什么定义它但不允许? @Mikaveli:无论如何我都不会依赖 W3Schools 页面的准确性。 【参考方案1】:

“为什么在严格的文档类型中不允许它,即使它在规范中定义?

很多东西在规范中定义,但在 Strict 中是不允许的。 &lt;font&gt; 浮现在脑海中。这些是规范的开发人员认为需要记录的东西,当时在浏览器中使用,但应该放弃。

我能想到他们可能认为的两个原因:

“Why do iframes suck?”。 &lt;iframe&gt;(理论上)几乎没有 &lt;object&gt; 无法实现的

【讨论】:

您认为使用 iframe 允许服务器显示禁用 javascript 的内容是否可以接受?我正在使用 JavaScript 访问 Web 服务以显示页面的 一些 内容,但我想退回到 iframe,如果 JS 不可用,服务器可以在其中发出请求。跨度> @jujurawrs - 这是一个相当主观和有争议的问题,所以我不愿在这里讨论它。 你真是太外交了。感谢您的时间:-)【参考方案2】:

iframe 不包含在 html strict 中。对于验证,请尝试使用 object 元素。

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

您还应该为对象元素添加宽度和高度属性。请注意,与 iframe 不同,对象不能成为任何页面链接的目标。

除非出于某种原因您特别需要 html4 严格验证,否则最好使用 html5 doctype。

【讨论】:

以上是关于为啥 <iframe> 元素在 HTML 4.01 中无效?的主要内容,如果未能解决你的问题,请参考以下文章

iframe怎么使用?

求教编程高手,关于JS判断一个元素在父窗口还是子窗口内~先谢谢了~

为啥自关闭 iframe 标记会阻止显示更多 DOM 元素?

JS如何判断元素相对于父窗口的绝对位置?

iframe引进网页的文件预览不显示

为啥点击 ESCAPE 会阻止 <iframe> 加载?