使用<object>标记包含HTML内容:允许的包含文件格式

时间:2015-05-13 17:34:35

标签: html

好的,我知道如何使用<object>标记从单独的文件中包含HTML内容。我无法找到有关所包含的HTML文件中允许/要求的信息。可以说包含的文件只是带有一些HTML标签的文本,或者它是否必须是包含标题<head><body>的完整HTML文件?如果它出现在该DOM中,它如何出现在原始文档的DOM中?或者这两个文件是完全分开处理的?

是的,我知道,我可以尝试看看哪些有效。但是,我对HTML有足够的了解,知道现在发生的事情可能不是正确的做事方式。我不希望任何人在这里列出所有规则,但如果有人可以发布一些链接我会非常感激。这是一个已经证明难以在互联网上搜索的话题。

3 个答案:

答案 0 :(得分:1)

<object> in HTML5<object> in HTML4

  

object元素表示外部内容,根据内容的类型,外部内容将被视为图像,嵌套浏览上下文或插件处理的外部内容。

来自HTML4的动机:

  

以前版本的HTML允许作者包含图像(通过IMG)和applet(通过APPLET)。这些元素有几个局限性:

     
      
  • 他们未能解决如何包含新媒体类型和未来媒体类型的更一般性问题。
  •   
  • APPLET元素仅适用于基于Java的applet。不推荐使用此元素以支持OBJECT。
  •   
  • 他们造成无障碍问题。
  •   
     

为了解决这些问题,HTML 4引入了OBJECT元素,它提供了通用对象包含的通用解决方案。 OBJECT元素允许HTML作者指定对象为用户代理呈现所需的所有内容:源代码,初始值和运行时数据。 在此规范中,术语“对象”用于描述人们想要放在HTML文档中的内容;这些东西的其他常用术语是:applet,插件,媒体处理程序等。(强调我的)

因此,基本上,<object>元素非常通用。唯一真实的条件是客户端需要某种功能来呈现元素。

例如:

<object data="test.html" height="50" width="50"></object>

使用Firefox在一个很小的区域(无缩放!)中呈现test.html的内容,而links只显示[OBJ]

Embedded Content解释了遇到<object>元素时会发生什么。

  

由于上述算法, 对象元素的内容充当后备内容,仅在无法显示引用的资源时使用 (例如,因为它返回了404错误)。这允许多个对象元素彼此嵌套,针对具有不同功能的多个用户代理,用户代理选择它支持的第一个。 (强调我的)

我认为这回答了<object>如何进入DOM的问题。例如,如果是其他任何方式,则包含文档中的元素id可以在主页的DOM上进行操作。

无论您在当前用户代理中观察到哪些功能,都应确保包含的HTML文档结构合理且有效。

再往下,考虑一下这个例子:

  

在此示例中,使用object元素将HTML页面嵌入到另一个页面中。

<figure>
    <object data="clock.html"></object>
    <figcaption>My HTML Clock</figcaption>
  </figure>

请注意,该示例引用了 HTML页面 - 而不是片段。

答案 1 :(得分:1)

<object>是一种包含通用媒体对象的方法。

HTML文档就是这样的一个例子。

HTML规范没有描述向浏览器提供HTML片段的方法,只提供完整的文档。 HTML片段没有标准的MIME类型。

因此:您应该使用完整的HTML文档。

也就是说,如果你要沿着这条路走下去,你几乎肯定会更好地使用<iframe>,它有更多功能强大的API和文档。

  

如果它出现在原始文档的DOM中,它是如何出现在原始文档的DOM中的?

作为对象元素。其子节点是您在开始和结束标记之间提供的任何替代内容。

  

或者这两个文件是完全分开处理的?

是的,非常像iframe。

答案 2 :(得分:1)

13.5 Notes on embedded documents中,我相信我已经找到了我的两个问题的答案。第二段说,

  

嵌入式文档完全独立于其中的文档   它是嵌入式的。例如,嵌入式中的相对URI   文档根据嵌入文档的基URI解析,   不是主要文件的。仅呈现嵌入的文档   在另一个文件中(例如,在子窗口中);它仍然是   独立的。

所以,是的,正如@Quentin和@Sinan所说,它需要嵌入的.html文件才能成为一个完整的,有效的.html文件。并且,不,它不会成为原始文档的DOM的一部分。

感谢大家的及时帮助。 StackOverflow社区继续令我惊讶。