问题描述

在 web-based 系统中,我维护了最近上线的工作,它使 Object 元素在主网页中嵌入第二个网页。 (有效地,主网页包含菜单和标题,主应用页面在对象中)

例如

<object id="contentarea" standby="loading data, please wait..."  
    title="loading data, please wait..." width="100%" height="53%" 
    type="text/html" data="MainPage.aspx"></object>

此应用程序的较旧版本使用 IFRAME 来执行此操作。我发现通过使用对象标签,嵌入式网页的行为与以前托管在 IFRAME 中的行为方式不同。在 IE 中,例如,工具提示看不到工作 (我将发布一个关于这个的单独的问题!),并且看起来嵌入式页面无法访问脚本中的父页面,尽管如果它是一个 IFRAME 。

我被告知,IFRAME 中的对象标签的原因是 IFRAME 已被弃用,因此对于未来版本的浏览器不能依赖。这是真的吗?是否最好在 Iframe 上使用 Object 标签来嵌入网页?还是 IFRAME 将来可能会是 well-supported(很久以前我老了​​,灰色,并且过去了我维护的应用程序的使用寿命)?

最佳解决方法

IFRAME elementupcoming HTML5 standard 的一部分。此外,HTML5 是由主要的浏览器厂商 (Mozilla,Opera,Safari,IE) 开发的,它们基本上保证了在可预见的将来我们将拥有一个 IFRAME 元素。其中一些人已经支持一些 HTML5 元素,如 AUDIO 和 VIDEO 以及一些新的 JavaScript API 。

the OBJECT element is in the draft 也是如此,但这是因为 IFRAME 和 OBJECT 将有不同的用途。 IFRAMES 主要设计用于沙盒 Web 应用程序。

所以,我的建议是使用 IFRAME 而不是 OBJECT 。

次佳解决方法

IFRAME 不是 XHTML 1.0 严格 DTD 的一部分。我们相信,它们在 HTML 4 和 XHTML 1.0 Transitional 中完全有效。由于这些原因,IFRAME 将继续得到长期的支持。

很多书签和分析代码仍然使用 IFRAME 。

第三种解决方法

如果您正在嵌入 HTML 页面,以下是 iframeobject 之间的明显区别:

  • iframe 更新 src 将更改浏览器历史记录 (添加新条目)

  • object 更新 data 不会更改浏览器历史记录

此外,如果页面嵌入在 object 标记中,但拖放和拖放似乎不起作用,但在 iframe 标记中可用。我注意到它亲自使用 react-draggable,我可以看到有人有同样的问题 (https://stackoverflow.com/questions/31807848/replacing-iframe-with-object-tag-drag-and-drop-not-working)

第四种方法

尽管 W3C 规范可能表明 IFRAME 标记已被弃用 (至少在 XHTML 中),但浏览器开发人员并不一定遵循这些规范 (IE6 的任何人)?

因为目前使用 IFRAME 是如此流行,而 W3C 似乎无法决定他们是否是未来的一部分 (HTML 4.01 vs XHTML),所以我确信他们是几乎每一个都使用更安全的实现浏览器。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。