iframe標(biāo)簽在網(wǎng)頁(yè)中可以創(chuàng)建一個(gè)內(nèi)嵌框架,通過指定src屬性來調(diào)用另一個(gè)網(wǎng)頁(yè)文檔的內(nèi)容。和frameset一樣,用它來對(duì)網(wǎng)頁(yè)結(jié)構(gòu)進(jìn)行拆分以使網(wǎng)頁(yè)的某些部分保持公用,但相對(duì)frameset對(duì)整個(gè)網(wǎng)頁(yè)進(jìn)行框架結(jié)構(gòu)的拆分來說,iframe更加靈活,可以內(nèi)嵌到網(wǎng)頁(yè)的任意地方。由于iframe使用上的這個(gè)特點(diǎn),在一些網(wǎng)頁(yè)中得到了大量運(yùn)用,也導(dǎo)致了一些不適宜的濫用。網(wǎng)頁(yè)設(shè)計(jì)將分析一下iframe這個(gè)網(wǎng)頁(yè)元素常見的幾種使用方式。
onload=”document.f.q.focus();if(document.images)new image().src=’/images/nav_logo4.png’”
這樣一句代碼,加載的圖片nav_logo4.png在首頁(yè)并沒有用到,但搜索結(jié)果列表等其他頁(yè)面使用此圖片的時(shí)候只需要從緩存讀取,不需要重新下載了。
除了以上三種應(yīng)用,對(duì)于iframe元素也常見一些不恰當(dāng)?shù)倪\(yùn)用。例如在頁(yè)面中嵌入過多的iframe框架,通過指定框架外鏈接標(biāo)簽的target屬性在點(diǎn)擊時(shí)來更新iframe,這種用法和frameset類似,達(dá)到共用導(dǎo)航的目的。初衷是好,但其中的弊病也毋庸置疑。這樣會(huì)導(dǎo)致一個(gè)頁(yè)面請(qǐng)求過多,上文所提及的雅虎團(tuán)隊(duì)《best practices for speeding up your web site》一文中就明確優(yōu)化頁(yè)面需要“使iframe的數(shù)量最小”,歸納了其三種弊?。?/p>
- 即使內(nèi)容為空也會(huì)造成資源損耗(包括客戶端、服務(wù)器端);
- 阻滯頁(yè)面onload事件觸發(fā)(“blocks page onload”,又有譯作“會(huì)阻止頁(yè)面加載”,此處存疑)
- 沒有語(yǔ)義(seo是網(wǎng)站營(yíng)銷的重要組成部分)
在xhtml1.0的下一個(gè)版本html5中,由于frameset標(biāo)簽對(duì)網(wǎng)頁(yè)可用性方面產(chǎn)生的負(fù)面影響,沒有對(duì)它提供支持,這也從側(cè)面說明一些問題。
另外,由于內(nèi)嵌的iframe不能自動(dòng)適應(yīng)其內(nèi)部?jī)?nèi)容大小,為了保持頁(yè)面顯示的完整性,還需要編寫一段javascript腳本來根據(jù)iframe內(nèi)容的變化即時(shí)調(diào)整其大小。分散的多個(gè)請(qǐng)求再加上需要javascript腳本來修正更增加了多iframe頁(yè)面系統(tǒng)運(yùn)行的風(fēng)險(xiǎn)。那么,有沒有什么好的方法能保持部分頁(yè)面內(nèi)容公用呢?服務(wù)器端早就給我們提供了解決方案,asp中的include,php中的require方法,都是用來包含一段已有的代碼到程序中,這樣同樣能實(shí)現(xiàn)頁(yè)面的某個(gè)部分(如導(dǎo)航菜單、頁(yè)腳)公用,但是運(yùn)行之后作為一個(gè)完整的頁(yè)面輸出,有效地減少了客戶端請(qǐng)求,同時(shí)也不存在iframe的高度自適應(yīng)的問題。
新聞熱點(diǎn)
疑難解答