問題描述

在 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。