一 目的

  iframe是网页布局中重要的元素,是解决一些常见前端问题的必修课,而iframe总是让人捉摸不透,不好掌握。关于iframe,有很多问题我们必须要彻底弄清。笔者累一年经验,3天构思,欲阐述关于iframe的那些事。虽然都是常见的知识,但是很少有人能深入理解,灵活使用。

  iframe在布局,无刷新方面都有极其中重要,不可替代的地位。虽然现在流行DIV布局,但是有时还得用iframe布局;虽然2005年流行使用AJAX进行无刷新,但是在特效情况下还得使用iframe;在flash动画内嵌html时,iframe更是必不可少。本文的主要目的就是针对这些问题展开讨论,并且总结。本文目的有:

  1.iframe的基础,深入理解frame是何物,属性该如何设置。

  2.iframe自适应高宽,即ifrmae在布局方面的应用。

  3.iframe的表单无刷新,iframe在上传文件时的无刷新作用。

  4.iframe的跨越问题。

  5.iframe与jQuery。

  请不要怀疑iframe的缺点,不要担心iframe的使用量。各大网站都在使用,淘宝,百度,新浪,博客园,都能找到iframe的踪迹。

二 什么是iframe

  iframe即内联框架。不同于frame,frame与frameset综合使用,成为帧,框架集。frame已经不大使用了,说白了,frame是僵硬的叠加,iframe是内联的,不是简单的叠加,而是承前启后,对于外围的页面,iframe是一个普通的元素,对于iframe里面的内容,又是一个五脏俱全的页面。iframe的写法是:

  <iframe id="coreIframe" name="coreIframe" src="/blank.html"></iframe>

可以看出,iframe毫无神秘可言,就是一个普通的元素,与span,div一样。那么,iframe是内联元素还是块元素?第一,iframe可以设置width,height并且有效。第二,iframe像普通文本一样不会换行。看图:

  由此两点,可以判定:

  iframe是inline-block元素。

  iframe的基本属性与其他元素一样,有样式的,也有特有的。其中,关于样式的完全可以使用css设置。有些属性不建议使用,也没有必要使用,下面列出iframe的常用属性:

  1.frameborder:是否显示边框,yes,no。

  2.height:框架作为一个普通元素的高度,建议在使用css设置。

  3.width:框架作为一个普通元素的宽度,建议使用css设置。

  4.name:框架的名称,window.frame[name]时专用的属性。

  5.scrolling:框架的是否滚动。yes,no,auto。

  6.src:内框架的地址,可以使页面地址,也可以是图片的地址。

比较特别的iframe属性只用三个:frameborder,scrolling,src,所有的iframe几乎都要指定。典型的iframe元素一般是:

  <iframe id="mainIframe" name="mainIframe" src="http://www.baidu.com" frameborder="0" scrolling="auto" ></iframe>

  <iframe id="mainIframe" name="mainIframe" src="blank.html" frameborder="0" scrolling="auto" ></iframe>

并且使用css设置其样式:

  #mainIframe{

    width:1000px;

    height:800px;

    border:1px blue solid;

    margin-left:10px;

  }

  上面都是将iframe作为一个普通元素看待,看的出来,iframe就是一个普通的元素。

三 iframe自适应高度

  iframe的自适应高宽是个不小的难题。所谓的iframe高度自适应,一般就是要嵌入的iframe符合以下要求:

  1.内嵌的iframe,要适应父页面,当需要滚动条,滚动条显示,不需要时,滚动条不显示。

  2.当父页面窗口发生变化时,iframe也会变化。

  3.当iframe的内容变化时,其滚动条也要适应。

  首先,不要盲目的去关注这个命题,而应该理解,哪些东西影响了iframe的高宽,iframe在页面中如何表现。如果对页面的高度,宽度不不够了解,经常糊涂,请看笔者的另两篇文章,页面的高度发微,页面的宽度发微。要是做到高宽自适应,无非是在父页面的窗口大小,文档大小,iframe元素的高宽,子页面的窗口大小,文档大小,等方面下功夫。首先,父页面是我们编写的,窗口大小由用户即浏览器决定,文档大小由页面内容决定,而子页面的文档大小,我们也许不能决定,如果是跨越的。幸好,iframe的自适应高宽无需使用文档大小。而只需要窗口大小和iframe元素大小,其中窗口大小是只读的,所以只需要关心iframe元素大小即可。

  页面的加载顺序很重要,一般的,我们使用$(function(){})或window.onload等函数初始化页面,此时,页面中所有元素已经加载完毕。如果内嵌了iframe,同样道理,iframe作为页面的一个普通元素,也是先加载完毕,就是说,父页面的$(function(){})执行时,iframe的所有内容已经加载完毕了。下面是顺序图:

  

由此,完全不用再iframe里设置,全部js可以在父页面完成,而且只要调节iframe元素的width,height,scrolling即可。一般的,自适应iframe,将iframe得scrolling设置为auto即可。为了让页面上只显示一个滚动条,还要隐藏父页面的滚动条。那么总结起来,要注意以下事项,即可完成iframe的自适应高宽,而且不用关心跨域,跨浏览器等问题:

  1.隐藏父页面的(一般为top)滚动条。

  2.设置iframe这个元素的width,height为某个高宽,scrolling为auto。

  3.设置$(window).resiez(),或$(#XXX).resize(),使容纳iframe元素的节点在大小变化时,改变iframe的width,height以适应。

通过以上设置,完全可以做到iframe自适应。此间,不用对iframe中的子页面做任何设置,只需要在父页面完成所有程序。之所以这样,都归功于iframe的srcolling=auto这句程序最后起作用。示例如下:

  1.全屏无边框:http://www.zangb.com/html/demo/javascript/js_iframe_autoHeight_border.html

  2.有边框效果更明显:http://www.zangb.com/html/demo/javascript/js_iframe_autoHeight_border.html

四 iframe与无刷新

  iframe与无刷新有悠久的关系。笔者不知道ajax以前是如何无刷新的,也许是通过iframe。具体可以参看笔者的另一篇文章:form的target属性。iframe实现无刷新的原理就是在A页面的表单提交数据到服务器,并且指定target属性为B页面,服务器返回内容到B页面,然后在B页面中调用JavaScript程序,来刷新A页面,完成一次请求。如果在此过程中,B为A页面的一个iframe页面,而且一直不显示,则对用户来说,就是一个无刷新。

  这种无刷新比ajax要麻烦,但是同样意义非凡。在上传文件时,ajax是无法提交的,此时iframe似乎成了不二选择。

  但是有一个要求,就是AB页面同域。因为在整个过程中,会在B页面来调用A页面的js对象的方法或函数,就必须保证两个页面同域。否则操作非法。这种无刷新在网上随处可见,淘宝上很多。

五 iframe的跨域

   这里主要讲述iframe内html页面的归属。iframe内的html页面可以有两个来源,本域内的页面,外部引用的页面。我们知道,为了安全,js是不能访问其他页面的对象和方法的,除非两个页面同域。这是可以理解的,因为你不可能希望别人修改引用你的网站时还修改你的网站。

  如果有两段代码如下:

  A:<iframe id="mainIframe" name="mainIframe" src="/main.html" frameborder="0" scrolling="auto" ></iframe>

   B:<iframe id="mainIframe" name="mainIframe" src="http://www.baidu.com" frameborder="0" scrolling="auto" ></iframe>

我们该如何取iframe和子页面?有以下方法代码:

  var mainIframe = document.getElementById("mainIframe");

  var mainIframeW = window.frames["mainIframe"];

  var mainDocument = mainIframeW.document;

分别对应到AB页面是什么意思呢?我想很多人都不是很清晰。下面表格说明:

  mainIframe maiIframeW mainDocument
A代码 页面的普通元素,可以通过该对象设置iframe的width,height等一个普通元素的属性,DOM对象 子页面的window对象引用,BOM对象 子页面window对象的文档模型document,可以在父页面对子页面改写
B代码 同A代码,DOM对象 子页面的window对象引用,BOM对象 子页面window对象的文档模型document,不可以在父页面改写

  有一点要说明,如果两个页面有一个是其中一个的二级域名,可以通过js的方式设置为同域名:document.domain = xxx.xx。

 iframe与jQuery

  iframe与jQuery的关系十分简单。只要理解了一点,即可完全搞清楚:jQuery,$是页面上的一个js对象,即window的一个普通对象,获得这个jQuery对象后,就可以进行操作了。jQuery对象属于页面,如果要访问iframe页面的jQuery对象,首先要保证能够访问子页面的的对象,就是要满足父页面与子页面同域。当然iframe页面也要引入jquery.js。通常是以下写法:

  1.在父页面访问子页面的jQuery对象。window.frames["xxxIframe"].$("#top"),表示访问子页面的top元素。如果拆分开来,会更容易理解即:

  var iframe$ = window.frames["xxxIframe"].$;

  iframe$("#top");

  这里iframe$就相对于$。

  2.在子页面访问页面的jQuery对象。parent.$("#top")。拆分开来就是:

  var parent$ = parent.$;

  parent$("#top");

  如果是顶层框架,就是top.$("#top")。

七 总结

  关于iframe的主要知识点就这么多,如果不够详细,请留言。总结如下:

  1.iframe就是一个普通的html元素,同样可以通过css设置其样式,而起iframe还是一个inline-block元素。

  2.只要掌握了父页面和子页面的渲染顺序,就能很容易掌握iframe的自适应高宽。其实很简单,在父页面设置iframe元素的width,height即可,并且scrolling为auto。

  3.iframe的一个独特用处是,对含有文件上传表单的无刷新提交。

  4.注意如果iframe的内容是外部网址内容,则不能操作其document。

转载于:https://www.cnblogs.com/xiaozhumaopao/p/6550494.html

深入理解iframe相关推荐

  1. div iframe html5,深入理解iframe

    深入理解iframe 一.什么是 iframe iframe 用于在页面内显示页面,使用 会创建包含另外一个文档的内联框架(即行内框架) 二.iframe 的常用属性 1.width 定义 ifram ...

  2. JavaScript专题(二):深入理解iframe

    原文地址为: JavaScript专题(二):深入理解iframe 一 目的 iframe是网页布局中重要的元素,是解决一些常见前端问题的必修课,而iframe总是让人捉摸不透,不好掌握.关于ifra ...

  3. iframe学习总结

    iframe标签用法详解(属性.透明.自适应高度) iframe一般用来包含别的页面,例如我们可以在我们自己的网站页面加载别人网站的内容,为了更好的 效果,可能需要使iframe透明效果,那么就需要了 ...

  4. html iframe php,html iframe使用的实战总结分享

    说在前面的话,iframe是可以做很多事情的. 例如: a>通过iframe实现跨域; b>使用iframe解决IE6下select遮挡不住的问题 c>通过iframe解决Ajax的 ...

  5. iframe标签(属性介绍(sandbox、srcdoc、scrolling)、iframe对象、onload事件、父集获取iframe内节点(同源和不同源情况)、domain修改规则和示例)

    目录 iframe标签 属性简要汇总 部分属性详细介绍 align fameborder height|width marginheight|width name sandbox scrolling ...

  6. HTML iframe 标签

    定义和用法 iframe 元素会创建包含另外一个文档的内联框架(即行内框架) 把需要的文本放置在 和 之间,这样就可以应对无法理解 iframe 的浏 IFrame 对象 IFrame 对象代表一个 ...

  7. html name选择器,iframe标签的name属性

    如何用 iframe 中的 JavaScript 获取 iframe 本身这个要看有没有选择器了 如果有的话 比如 iframe 的id name class 获取其它标签都可以 有的话下面 比如这是 ...

  8. 前端页面中的iframe框架的实践

    说在前面的话,iframe是可以做很多事情的. 例如: a>通过iframe实现跨域; b>使用iframe解决IE6下select遮挡不住的问题 c>通过iframe解决Ajax的 ...

  9. iframe标签的使用

    iframe标签的使用 1.什么是iframe 2.iframe的元素属性 3.iframe操作 4.iframe 对象及属性 5.创建iframe元素 6.iframe之间的通信 6.1.什么是主域 ...

最新文章

  1. 30秒或更短的时间内弄懂的有用CSS代码片段
  2. 低潮过后,未来医疗可穿戴市场将如何发展?
  3. Java 生成滑动图片验证码, 阴影, 切块
  4. 关于nginx信号控制的“故障”案例
  5. Decorator pattern
  6. Docker 部署ELK 日志分析
  7. 板邓:wordpress循环输出分类信息函数get_categories()
  8. 开发者账号申请 真机调试 应用发布
  9. LateX在windows中运用MiKTeX
  10. 写代码抽取代码的技巧
  11. plsa的java实现_java在注解中绑定方法参数的解决方案
  12. php之使用file_get_contents对百度orc进行文字识别(二维码识别同理)--base64编码方式(解决image format error)
  13. html静态模板资源,可下载源码
  14. 中文核心期刊投稿指南
  15. 使用C#创建一个进程杀手Windows服务
  16. 库卡profinet通讯中文说明书
  17. 蛋白质中二硫键特征的质谱分析技术及其应用
  18. 解决宏碁5750g ubuntu无法调整和保存屏幕亮度的问题
  19. BeanUtils.copyProperties 和 fastjson 性能对比
  20. mysql的msi文件下载

热门文章

  1. 网络安全系列之五十 对Web主目录进行备份
  2. poj 1740 A New Stone Game 博弈
  3. 程序设计类课程教学中创造技法的探索
  4. SQLServer之创建分布式事务
  5. CSS5:移动端页面(响应式)
  6. mipi屏在内核可以显示logo但是u-boot无法显示的问题【转】
  7. tomcat升级后报错: Invalid character found in the request target.
  8. 【ZZ】编程能力层次模型
  9. 20160531-20160607springmvc入门
  10. CZoneSoft出品: 音频视频在线录制系列之 AV留言本 简介