如果是你碰到这样的需求,你会如何去解决?
今天在Segment Fault看到的这个问题。我的第一反应就是使用Iframe来实现。
但是题主明确说明了,需要非Iframe的实现方式。因为iframe
会导致内存泄漏。
Iframe会导致内存泄漏?
我还没有接触过这类问题,正好学习一下。
查了一下资料,发现Iframe已经是一个过时的技术了,已被新的技术所取代。现在更推荐使用Embed标签来进行页面和资源的嵌入,它定义了一个外部应用程序的容器。
而Iframe则存在着以下几个坑点:
- Iframe相当于打开一个网页,同时会请求嵌入页面资源,但是又无法释放内存。
- Iframe会阻塞主页面的
onload
事件,必须在页面嵌入结束才触发。 - Iframe和主页面共享连接池,浏览器对同个域的连接有限制,会影响页面对资源的并行下载。
- Iframe在移动端的支持并不好。
- Iframe对统计代码不友好。
- Iframe的尺寸自适应问题是个坑。
参考: 为什么前端尽量少用iframe?
实现
那么除了Iframe,我们可以如何去实现上述需求呢。
Object标签
object 标签 它定义了HTML文档中的嵌入对象。可用于HTML文件和多媒体内容,如音频,视频,小程序,ActiveX,PDF和Flash或其他插件)。
1 | <object data="http://stackoverflow.com" width="400" height="300" type="text/html"> |
Embed标签
embed 嵌入标签。它定义了一个外部应用程序的容器,例如一个插件,也可以用于显示一个HTML页面。
1 | <Embed src="http://stackoverflow.com" width="400" height="300" /> |
参考资料
How to Show External website inside another page without iFrame?