天天看点

iframe的一些记录1、iframe无刷新文件上传2、iframe自适应高度3、iframe跨域通信

首要要做配置操作,配置两个域名,我这里使用的是Apache。附件中的demo1和demo2

iframe的一些属性介绍:

属性

描述

align

left

right

top

middle

bottom

不赞成使用。请使用样式代替。

规定如何根据周围的元素来对齐此框架。

frameborder

1

规定是否显示框架周围的边框。

height

pixels

%

规定 iframe 的高度。

longdesc

URL

规定一个页面,该页面包含了有关 iframe 的较长描述。

marginheight

定义 iframe 的顶部和底部的边距

marginwidth

定义 iframe 的左侧和右侧的边距。

name

frame_name

规定 iframe 的名称

sandbox

""

allow-forms

allow-same-origin

allow-scripts

allow-top-navigation

启用一系列对 <iframe> 中内容的额外限制。

scrolling

yes

no

auto

规定是否在 iframe 中显示滚动条。

seamless

规定 <iframe> 看上去像是包含文档的一部分。

src

规定在 iframe 中显示的文档的 URL。

srcdoc

HTML_code

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

width

定义 iframe 的宽度。

这个上传我服务器端使用的是PHP代码。

 使用iframe上传的关键点是target="iframeUpload",这个属性的设置。action.php中的代码如下:

同域的情况下:

网络中的方法一:直接用onload函数获取iframe中的内容高度,如果页面载入一次以后,高度不变,这招是挺好用的,但是我在firefox与IE中,表现不理想,如图,并没有完全的将页面显示,chrome和safrai的表现不错。

后面发现,如果在iFrame1.document.body.scrollHeight的后面在加上20的话,iframe也是能完全展现出来的,这个应该是受到了我autoheight.html这个页面里的CSS影响,

autoheight.html中的页面代码是这样的:

为了验证我的猜想,我把padding给去除掉,还是用原先的代码onload="this.height=iFrame1.document.body.scrollHeight",但事实与我的猜想完全不同

 这句是用来获取iframe的window对象。

意思就是一些浏览器可以通过iframeElement.contentDocument.parentWindow获得iframe的window对象。经过测试发只有IE9与IE8是根据iframe.contentDocument.parentWindow来获取的,其他firefox、chrome、safrai、IE6、IE7都是根据frame.contentWindow获取的

这句话就是在获取iframe的高度了。

body是DOM对象里的body子节点,即 <body> 标签;

documentElement 是整个节点树的根节点root,即<html> 标签;

刚刚上一个方法由于用的是body.scrollHeight导致了各个浏览器的解释不同,引起了显示的不一致。经测试发现使用documentElement.scrollHeight后,都能正确显示。

异域的情况下:

跨域的时候,由于js的同源策略,父页面内的js不能获取到iframe页面的高度。需要一个页面来做代理。总共有三张页面,

index.html中代码:

iframe.html中代码:

agent.html中代码:

网络方法一:这是一种通过第三张页面来跨域执行函数,一种代理的感觉

iFrame4与iframeD分别为index_cross.html与cross_domain1.html页面上面的iframe的id。

这是一种非常优雅的方式,但是是用url的方式在传递参数,大小被受到了限制,如果数据量大的话,是会有问题的。

index_cross.html中代码:

cross_domain1.html中代码:

cross_domain2.html中代码:

 成功后出现的提示信息

网络方法二:

1) 支持HTML5的浏览器可以使用postMessage

  IE8、IE9、firefox、chrome和safrai可用postMessage函数

  index_cross.html中代码:

  post_message.html中代码:

2) IE6、IE7可以用navigator对象的跨大域漏洞

  navigator.html中代码:

源码可以在这里下载:

<a href="http://files.cnblogs.com/strick/iframe.rar">iframe.rar</a>

参考资料:

    本文转自 咖啡机(K.F.J)   博客园博客,原文链接:http://www.cnblogs.com/strick/p/3814872.html,如需转载请自行联系原作者

继续阅读