浅谈iframe

昨天在一家公司的笔试题中遇到一道题目:

*iframe有那些缺点?*

我这,完全不知道怎么答啊,虽然有遇到过这道题,可是在实际开发中没有用到过iframe,我当时粗略看了下答案也没记住……虽然不知道以后开发会不会用到,但是秉着遇到就不要放过的思想我决定了解一下  

关于iframe

下面是W3School对<iframe>的定义:
*iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。*

其实我也不太明白这个什么意思,不过按我的理解就是:iframe提供了一个简单的方式吧一个网站的内容嵌入到另一个网站中。 
 
那iframe一般用在什么方面呢?

目前用得最多的是管理后台类网站,左边一个菜单list,右边就是iframe的tabs,可以随时打开、关闭页面。在这种系统中,如果把iframe替换成div,那么大量页面中相同类型的表格、表单等就要用不同的id、class。因为js是针对body下的所有对象的,所以这种系统用iframe比较好。可以在iframe里面自由使用js和标签id的定义,而且父页面和菜单列表一般不会刷新,所以iframe带来的内容也就和一般页面的刷新一样。
  
如果我们需要独立的浏览上下文,那就用iframe,否则不用。

*iframe常被用于复用部分界面,比较早期的网站使用 iframe,主要是用于导航栏(navigator)。为什么?*

因为一个网站很多页面的导航栏部分是相同的,在避免切换页面的时候重复下载,将导航栏和正文分开在 iframe 中,是一个方便的做法。同时带来的不利是,默认情况下,使用了 iframe 的网站的 URL 不会随着页面的变化而变化。这就意味着一旦刷新,网站可能又回到首页。

*那么现在什么时候会用到 iframe 呢?*

因为 iframe 的页面和父页面(parent)是分开的,所以它意味着,这是一个独立的区域,不受 parent 的 CSS 或者全局的 JavaScript 的影响。典型的,比如所见即所得的网页编辑器(WYSIWYG Online HTML Editor),因为它们需要 reset 自己的 CSS 到自己的标准,而不被 parent CSS 的 override。

使用 iframe 是不是一个好的用法(good practice),不能一概而论,但是可以肯定是,现在的大部分网站避免采用这种方式的。

iframe的优点

  • 隔离上下文,便于更改,模块分离

iframe的缺点

  • spider比较抓取到iframe里的内容,因此seo优化经常用div代替frame

  • iframe会阻塞主页面的Onload事件

  • iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。 使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript 动态给iframe添加src属性值,这样可以绕开以上两个问题。

目前国内那些网站用到iframe

  • QQ邮箱

  • 网易云音乐底部的播放条

  • W3School的代码测试页面

参考自:知乎问答-Iframe 有什么好处,有什么坏处?国内还有哪些知名网站仍用Iframe,为什么?有哪些原来用的现在抛弃了?又是为什么?

正在努力成为一名还不错的前端工程师

298 声望
10 粉丝
0 条评论
推荐阅读
JavaScript模块化简述
大部分人可能都大概了解以上代码的意思是 导入(引用) or 导出一些代码块。但是大家有没有想过,同样是导入、导出功能,为什么一个项目中常常能同时看到import和 require呢?他们又有什么区别的呢?要回答这些问...

猪猪猪惠婷阅读 1.3k

那些不用js也能实现的效果
本文首发于公众号:GitWeb,欢迎关注,接收首发推文本文列举几个不需要使用js也能实现的效果一、页面回到顶部回到顶部是页面开发中很常见的一个功能,一般的做法是对回到顶部组件做一个监听,当用户点击的时候,...

Winn11阅读 1.1k评论 6

封面图
Three.js 进阶之旅:全景漫游-初阶移动相机版
3D 全景技术可以实现日常生活中的很多功能需求,比如地图的街景全景模式、数字展厅、在线看房、社交媒体的全景图预览、短视频直播平台的全景直播等。Three.js 实现全景功能也是十分方便的,当然了目前已经有很多...

dragonir12阅读 1.5k

封面图
英雄联盟比赛选手的六芒星能力图动画是如何制作的?
最近,在看 LPL 比赛的时候,看到这样一个有意思的六芒星能力图动画:今天,我们就来使用纯 CSS 实现这样一个动画效果!实现背景网格对于如下这样一个背景网格,最好的方式当然肯定是切图。如果一定要使用 CSS,...

chokcoco12阅读 1.2k

封面图
学会了slidev.js的开发者, 也许可以考虑不用ppt了?
&ensp;&ensp;&ensp; 作为一个开发者, 每次使用PPT或者Word写简历或者述职都好痛苦啊, 这些App也不太适合展示代码, 但是今天来的家人们有福了, 一款叫做是slidev的库露出了邪魅的微笑 官网地址。

lulu_up8阅读 1.3k

🖼️ 如何解决 SVG 图片中字体失效的问题
如果你喜欢我的文章,希望点赞👍 收藏 📁 评论 💬 三连支持一下,谢谢你,这对我真的很重要!「SVG 图片中字体失效」的修复方案很简单,只想看答案翻到最后看结论就行。如果想看我的排查思路和具体原因可以从头开始...

卤代烃6阅读 1.4k

uniapp 定义动画的几种方式
本章的前提就是大家都知道动画的基本属性,例如animation-name、animation-duration、animation-timing-function、animation-delay、animation-iteration-count和animation-direction 属性。

脑子没墨水6阅读 2.1k

封面图

正在努力成为一名还不错的前端工程师

298 声望
10 粉丝
宣传栏