前言
關於iFrame是否過時的爭論從未停息,我曾狂戀過她、也曾憎惡過她,但是最近項目中關於她的一番折騰,那我開始心平氣和地去看待她,她不好也不壞就在那里,用與不用全在於你。
這篇文章我不想發表什么觀點,只是想匯總展示一下別人對她的一些觀點,希望對大家有所啟發。
問題提出:
聽說iFrame已經過時了,真希望這不是真的,難以想象不再使用她的后果如何。我想提出下面兩個問題,希望大家能探討一下:
1、為什么iFrame標簽會過時?
2、如果iFrame標簽過時了,使用什么方法去替代她?
問題回答:
A:我認為W3C在DOCTYPE為Strict HTML和XHTML文檔里面實際已經將iframe排除在外。理論上來說,你可以使用<object>元素來添加一些外來的對象到你的文檔里面,但是跨瀏覽器開發的限制使得對許多開發人員來說,這種開發變得不可取。但是一個好消息是在HTML 5中,iFrame又回來了,並且多了兩個新的屬性 seamless 和 sandbox。
B:HTML 5里面依舊支持iframe,所以我認為在可以預見的未來,iFrame不會過時。回答一下你的其它兩個問題:
1、iframe大部分時候並不是友好的:很難通過URL獲取iframe的內容、大多數"技術恐懼"的用戶討厭frames、相對而言瀏覽器渲染iframe效率更低
2、至於替代,你不但可以使用動態頁面(SSI, PHP, Rails等)生成,或者可以使用JavaScript、AJAX去改變內容。
聲明一點:我們這兒討論的iFrame是一個接口元素(interface element),並不是一個隱藏元素(hidden element)用於加載其它東西。
C: iFrame對於頁面的布局來說是過時的了。永遠不要用iFrame進行布局,你可以使用很好的CSS布局,甚至table-based布局也比iFrame布局好。至於何時使用iFrame,我總結了兩點如下:
1、ads:通常加載一些頁面廣告就是使用這種技術的,iFrame可以封裝好廣告頁面,使廣告頁面的CSS不會影響你的整體頁面
2、hidden iframe:使用其可用來做很多有用的事情,比如追蹤(Tracking)、替代AJAX等。
D:我之前的公司,我們提供一個主機應用程序(HOST Application),客戶然后將我們的主機應用程序整合到她們自己的網站。通常,他們都會使用一個iFrame來做這件事情,將我們的主機應用程序頁面調整后集成到他們的頁面中。有時這樣做起來甚至可以達到無縫集成的效果,我認為有時iFrame標簽很有用的。
小結:
前段時間項目中iFrame的使用很頻繁,由於在網頁中效果還算不錯,就沒有多加思考,但隨着項目的進展,發現iFrame在Mobile客戶端的webview里面效果很差,甚至不起作用,不得以我們開始大動干戈地將iFrame一個一個的替換掉。至此我想iFrame是好是壞,我們大可不必過多去想,我們要做的是了解清楚它的方方面面,有選擇有針對的去使用她。