认识iframe

认识iframe

最近的工作经常能用到iframe标签, 到目前为止对iframe的特性了解甚少, 以至于在使用的时候难以得心应手, 遂利用周末的时间来学习一下.

一. iframe是什么及作用

iframe是嵌入式框架, 是html标签, 还是一个内联元素, iframe 元素会创建包含另外一个文档的内联框架(即行内框架) . 说白了, iframe 用来在页面嵌入其他页面.

二. iframe的优缺点

优点:
  1. 页面和程序分离,几乎不会受到外界任何js或者css的影响, 便于使用

  2. 可以通过iframe嵌套通用的页面, 提高代码的重用率, 比如页面的头部样式和底部版权信息

  3. 重新加载页面时, 不需要重载iframe框架页的内容, 增加页面重载速度.

  4. iframe可以解决第三方内容加载缓慢的问题.

缺点:
  1. 会产生很多页面,不容易管理

  2. iframe框架的内容无法被搜索引擎捕获, 所以iframe不适用于首页

  3. iframe兼容性较差

  4. iframe有一定的安全风险

  5. iframe会阻塞主页面的Onload事件

三. iframe和frame的区别

  1. frame不能脱离frameSet单独使用,iframe可以

  2. frame不能放在body中, iframe可以

  3. 嵌套在frameSet中的iframe必需放在body中

  4. frame的高度只能通过frameSet控制;iframe可以自己控制,不能通过frameSet控制

  5. iframe 可以在表格中使用, frame 则不行

  6. HTML5支持iframe, 不支持frame

  7. frame几乎废弃, iframe老当益壮

  8. frame和iframe实现功能基本相同, 不过iframe更灵活. frame是整个页面的框架, iframe是内嵌的网页元素

四. 论iframe的生存价值

在HTML5标准中, 对 iframe 取消了一些属性, iframe的一些作用有被新功能替代, 例如ajax可以在页面动态插入其他页面的内容. 总的来说, iframe的弊端大于优势, 虽然现在在一些大型电商网站还能看到iframe的身影, 但毕竟技术的潮流不可逆, iframe的生存空间越来越少, 所以在网站开发中还是少用iframe的比较好.

五. iframe属性分析

5.1 align (HTML5 不支持。HTML 4.01 已废弃。)

规定 iframe 相对于周围元素的对齐方式, 属性值有 top, right, bottom, left, middle

<iframe align = "top"> </iframe>
5.2 frameborder (HTML5不支持)

规定是否显示 iframe 周围的边框.

<iframe frameborder = "0"></iframe> //不显示边框

<iframe frameborder = "1"></iframe> //显示边框
5.3 marginheight (HTML5 不支持)

规定 iframe 的顶部和底部的边距。其实可以理解为iframe的上下内边距, 并且这个属性不会增加iframe的高度, 超出默认显示滚动条

<iframe marginheight="10"></iframe>
5.4 marginwidth(HTML5 不支持)

同上, iframe 左右内边距, 不影响宽度, 超出显示滚动条

5.5 scrolling(HTML5 不支持)

是否显示滚动条

<iframe scrolling="auto"></iframe> //默认值, 内容超出显示

<iframe scrolling="yes"></iframe> //始终显示

<iframe scrolling="no"></iframe> //始终不显示
5.6 width height(HTML5支持)

iframe 的宽高, 属性值可以是固定值, 也可以是百分比(父类容器百分比)

<iframe width = "100%" height = "200"></iframe>
5.7 name (HTML5支持)

规定 iframe 的名称。

在 XHTML 中,name 属性已废弃,并将被移除。使用 id 属性代替。

<iframe name="helloworld"></iframe>
5.8 src (HTML5支持)

iframe 显示的内容地址

<iframe src="www.baidu.com"></iframe>
5.9 sandbox(HTML5新特性)

额外的限制, HTML 5通过sandbox属性提升 iframe 的安全性。sandbox属性可以防止不信任的Web页面执行某些操作。sandbox它可以防止如下操作

访问父页面的DOM(从技术角度来说,这是因为相对于父页面iframe已经成为不同的源了)

执行脚本

通过脚本嵌入自己的表单或是操纵表单

对cookie、本地存储或本地SQL数据库的读写

<iframe sandbox = ""></iframe>  //属性值空字符串 限制上述所有操作

<iframe sandbox = "allow-forms"></iframe> //允许表单提交

<iframe sandbox = "allow-scripts"></iframe> //允许脚本执行

<iframe sandbox = "allow-same-origin"></iframe> //允许将内容作为普通来源对待。如果未使用该关键字,嵌入的内容将被视为一个独立的源。

<iframe sandbox = "allow-top-navigation"></iframe>     //嵌入页面的上下文可以导航(加载)内容到顶级的浏览上下文环境(browsing context). 如果未使用该关键字,这个操作不可用。
5.10 seamless(HTML5新特性)(只有 Chrome 和 Safari 6 支持 seamless 属性)

渲染出来的页面你看不出是用 iframe 内嵌的(没有边框和滚动条)

个人感觉这个新特性不是多余吗? 去掉边框和滚动条不就行了? 难道是因为边框和滚动条在HTML5不支持吗?

<iframe seamless="seamless">
5.11 srcdoc(HTML5新特性)

规定页面中的 HTML 内容显示在 iframe 中

<iframe srcdoc="<h1>Hello world!</h1>" src="www.baidu.com"></iframe>

据个人测试, 即使没有src属性, srcdoc的内容也可以正常显示在iframe框架中

六. iframe高度自适应

iframe 在响应式页面中 高度自适应的解决办法(iframe高度自适应是个大学问, 这里只列举其中的一种方法)

window.onload = window.onresize = function(){
    var ifm= document.getElementById("iframe_id");  //iframe 的 id

    var ifmContent = ifm.contentWindow.document.body.scrollHeight || ifm.contentWindow.document.documentElement.scrollHeight;

    ifm.height = ifmContent;

}

————————————————

版权声明:本文为CSDN博主「喜欢文学的程序员」的原创文章

原文链接:https://blog.csdn.net/lishuai_it_trip/article/details/8231712


原文始发于微信公众号(前端24):认识iframe

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/216912.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!