2009-04-16 91 views
78

得到矛盾的消息,希望他們不是。 我無法想象它的支持會停止,因爲一個gazillion網站使用它們。IFrames(HTML)是否過時?

有關的一些其他問題:

  1. 他們爲什麼要淘汰這個標籤嗎?
  2. 它的任何替代方案?

回答

49

在我的意見的W3C跳轉從嚴格的HTML和XHTML doctypes轉儲iframe的槍。從理論上說,您可以使用<object>元素將外部對象添加到文檔中,但瀏覽器的差異和限制使得這對許多開發人員來說是不起眼的。使用更實用的HTML 5(仍然是草稿),iframe已經回來,甚至有兩個新屬性:seamless和迷人​​。

+0

真棒,我只是希望瀏覽器開始支持AJAX文件上傳,所以我們不需要使用iframe或flash。 – Xeoncross

+0

@Xeoncross Firefox和Chrome:https://developer.mozilla.org/en/Using_files_from_web_applications – chesles

22

IFrames不是過時的,但使用它們的原因很少見。

理由使用I幀:

  • 它從其他領域牆面掉別人的東西是偉大的,但它沒有順利整合。 (樣式表,JavaScript等)
  • 集成多媒體有時可以通過iframe輕鬆完成,而不是使用嵌入標籤。
  • 確實,真正專業化的案例,例如gmail的情況下,他們正在使用它的聲音和歷史管理。

我也會回答說,沒有必要去除iframe,這是一個需要的標籤,並且會在一段時間內出現。

7

IFrames與AJAX使用很多。例如,GMail使用我認爲的九個隱藏的IFrame。

+5

我計數五個iframe。一個並不隱藏,事實上,其中一個幾乎是整個視圖。通常,IFrame不會與Ajax一起使用(不管在任何主要框架中)。 Gmail正在使用iframe來實現以下功能:歷史跟蹤,聲音(單數)以及某種畫布繪圖。 – cgp

+0

我剛剛正在閱讀幾年前的一篇文章。 –

72

支持仍然存在於HTML 5中,所以我不認爲這會在不久的將來改變。

爲了回答您的其他問題:

  1. S(如一般幀)是大部分的時間不是用戶友好:
    • 他們不允許在內容的輕鬆訪問該框架通過URL(至少不會丟失框架之外的內容)。
    • 大多數「技術恐懼症」用戶被框架煩躁不安。
    • 據我所知,他們是慢渲染的瀏覽器
  2. 替代品包括動態頁面生成(SSI,PHP,導軌等),並使用JavaScript/AJAX改變例如內容a <div>

要清楚:我在談論作爲界面元素。不是加載其他內容的隱藏元素,例如Google Mail可以。

+28

+1,因爲Google爲了高度專業化的目的而使用iframe。 – cgp

2

我剛剛將網站從正常的Frameset更改爲Iframe,因爲正常的框架無法完成我所需的操作。它沒有引起其他代碼庫的問題。

23

iframes 已過時用於頁面佈局。切勿使用它們代替良好的CSS佈局,即使基於表格的佈局也更好。

使用I幀良好的原因是:

  • 廣告:例如AdWords使用這種技術,它是良好的封裝 - 廣告CSS不會破壞你的頁面。
  • 隱藏的iframe:它可以用於數百種可用的東西,比如跟蹤,Ajax的替代等
+33

***請勿對adwords使用iframe,否則將違反TOS。 *** http://www.scribd.com/doc/97655/15-Common-Mistakes-by-Google-Adsense-Publishers-that-Violate-Terms-of-Service – cgp

+34

altCognito:AdWords使用iframe而不是我: )我不是說把adword iframe放到另一個iframe中。 – Thinker

+7

我知道這是一個常見的錯誤(因此所有的文章),所以我想舉報它,以確保人們明白你在說什麼。 – cgp

5

在我以前的公司,我們提供的是客戶會整合到自己的網站上託管的應用程序。有時,他們會使用IFrame來做到這一點,將我們的託管頁面放入他們現有的設計中。有時甚至可以無縫地完成(即IFrame沒有邊框或滾動條,它看起來就像是頁面的一部分)。我認爲這是對標籤的很好的使用。

+0

iframes是必須處理的事情,你需要把自己的風格和Javascript放在客戶的網站,用戶的代碼不會中斷。 CSS可以輕鬆覆蓋,而且JS有時會導致衝突(在極少數情況下),所以它最適合「封閉系統」方法。 – vsync

5

在某些情況下,它們可能非常有用,但這些都是有限的。特別是跨多個站點嵌入通用功能。

例如,我有一個客戶經營許多蘇格蘭貨物電子商務網站。作爲其中的一部分,我們已經開發了一些簡單的應用程序來查找您的姓氏或您選擇的格子呢可能的家族名稱(如果您願意,可以傻笑,但格子呢每年對我們的經濟來說價值7億美元)。背後的數據庫非常大(核心名稱和格子呢表中近一萬行)並且定期更新。

因此,我們將應用程序設置爲在一個網站上運行,然後使用iframe將這些應用程序嵌入到我們的其他網站中,從而實現簡單的javascript參數傳遞,因此我們可以在嵌入網站上集成選擇帶有功能的格子呢或家族。 iframe被設置爲noborder,因此它對最終用戶而言看起來完全無縫。

當然,還有其他的方法可以做到這一點,但是iframe的使用很簡單而且強大。這當然不會過時。

7

IFrames沒死,但是Frameset/Frames正在死亡。

的最後2個版本中,IE(IE7/IE8)放大幀(非IFrame)已造成災難性後果。

通過一切手段使用IFrames,但恕我直言,保持清除Framesets/Frames。

4

在谷歌小工具規範目前依賴I幀:http://code.google.com/apis/gadgets/docs/spec.html

目前他們是唯一的簡單的方法來爲從多個域/供應商拉JavaScript的應用程序提供隔離。

人們在第三方網站上嵌入的小部件也使用iframe。

雖然他們確實有它們的缺點,但iframe爲網絡上的常見問題提供了實用的解決方案。我不得不猜測他們會在未來的一段時間。

0

我爲一家從下拉菜單,列表,內容塊等所有內容使用框架的公司工作,只是爲了覆蓋.net Web表單的錯綜複雜。該應用程序非常慢,只能在IE上運行。不要這樣做。

5

馬匹的課程... <iframe> s就像其他任何東西...爲正確的目的,他們是正確的工具;出於錯誤的目的,他們是一個醜陋的黑客,或更糟糕的。

在Ajax中,<div>通常是比較合適的容器。在某些地方,作爲您自己網站的一部分的假冒外部內容的活動(如<iframe>)所支持的行爲是不適當的。

我的團隊使用了一個<IFRAME>前些天作爲一種理想的方式,讓用戶訪問他們的HTML電子郵件歷史 - 電子郵件是完整的<HTML>頁,我們想輕鬆插入到我們的網頁模板。 <iframe>對於呈現該數據絕對完美]。

另一方面,<iframe>應幾乎總是被刪除或禁用在任何用戶提交的內容輸出回站點,因爲在這種情況下,它們是一個主要的安全問題。

2

法規遵從和安全問題也可能促使您使用Iframe;購物車是流行的基於IFrame的實現,當您想要將購物車視覺化合併爲某些網頁的一部分時,無需對付款處理方面承擔全部責任。

我們通常提供一個Iframe來整合我們的電子商務資料和客戶,例如它可以是多少交鑰匙。

12

我見過很多論壇,建議Object標記作爲IFrame的替代品,這可能適用於大多數情況。

例如,我有一個PDF顯示在IFrame中(因爲除了PDF之外,還需要在頁面上顯示其他內容),並且能夠使用Object顯示它。

是什麼:

<iframe id="confirmed_pdf" class="current_pdf" src="/prescriptions/show_pdf?id=123" height="570" width="480"></iframe> 

變成了:

<object id="confirmed_pdf" class="current_pdf" data="/prescriptions/show_pdf?id=123" type="application/pdf" height="570" width="480"> 
    <p>[Show this message if displaying the PDF did not work]</p> 
</object> 

但對象不是一個合適的替補,填補了要求,能夠僅打印頁面的PDF部分。

iframe是喜歡網頁中自己的窗口(窗口內的窗口,基本上),一旦你得到的窗口對象,你可以調用它.PRINT(),如:

jQuery("#confirmed_pdf").contentWindow.print(); 

IFrame具有contentWindow屬性,這使得只打印該部分成爲可能。對象沒有contentWindow屬性,因此無法僅打印頁面的部分。

所以,看起來如果你只是使用IFrame來顯示一些東西,還有其他標籤可以用來代替Object。但是,如果您需要以某種方式與IFrame的內容交互,那麼IFrame可能是必需的。