iframe窗⼝⾼度⾃适应的实现⽅法
domainA 中有⼀个页⾯index.html,通过iframe嵌套了domainB中的⼀个页⾯other.html
由于other.html页⾯在iframe中显⽰,⽽且其页⾯内容会动态的增加或减少,现在需要去掉iframe的滚动条
由于javascript同源策略的限制,⽆法进⾏跨域操作,使得问题⽐较棘⼿
参考了⼀下⽹上的做法,引⼊了⼀个代理页⾯,或者叫做中介 agent.html,属于domainA
然后,在domainB 中的other.html中,再使⽤iframe将agent.html进⾏嵌套
好了,现在情况是这样的:
index.html 使⽤iframe 嵌套 other.html
other.html 使⽤iframe 嵌套 agent.html
之所以要引⼊第3个页⾯agent.html,就是为了遵守“同源策略”的规则,完成不同domain下参数的传递!
我们最终的⽬的是要去掉滚动条,⼜要保证被嵌⼊的页⾯内容全部得到显⽰
1.取得other.html页⾯的实际⾼度height
2.将height设置到其嵌⼊的iframe的src属性上
3.在agent.html中截取出所属iframe的src属性中的height值
下⾯的例⼦中,使⽤了⼀个技巧,避免了使⽤setInterval()不断去设置iframe的⾼度
做法是在iframe的src上,附加⼀个时间戳,让浏览器每次都重新加载agent.html
进⽽让agent.hml中的js函数invokeMethodInTopWindow()得到执⾏
domainA 中的2个html
index.html
复制代码代码如下:
#{extends 'main.html' /}
#{set title:'Home' /}
<hr>
<div >窗⼝⾃适应---绕开同源策略的限制,同时⼜利⽤同源策略,去掉iframe的滚动条,动态调整窗⼝的⾼度,让其能够显⽰被嵌套页⾯的所有内容</div>
<!-- 需要动态调整⾼度的iframe -->
<div >
<iframe name="domainB" src="127.0.0.1:8088/other" width="80%" scrolling="no" frameborder="0"></iframe>
</div>
<script type="text/javascript">
function resize(height) {
//alert("resize");
}
</script>
agent.html
复制代码代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
我是代理页⾯哦!
<script type="text/javascript">
function invokeMethodInTopWindow() {
//alert("调⽤同域下的函数,重置iframe的⾼度");
var domainA = document.parentWindow;
var realHeight = domainA.location.hash.split("#")[1];
//last step:调⽤最上层窗⼝的函数,重置iframe的⾼度
size(realHeight);
//alert("realHeight:"+realHeight);
//alert(document.parentWindow.name);//获取容器所在窗⼝的名称 domainA
/
/error://alert(document.parentWindow.parent.name); //访问失败:不能访问domainB
//alert(document.parentWindow.parent.parent.name);//最顶层window属于domainA,因此可以访问
}
//使⽤不同的时间戳设置iframe的src属性后,就不⽤使⽤setInterval()
//setInterval("invokeMethodInTopWindow()",100);
</script>
</body>
</html>
domainB中的other.html
复制代码代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body onclick="proxy()">
<!-- 被A域所嵌⼊的页⾯ -->
<button type="button" onclick="btnClick()">切换显⽰</button>
<div >
在JavaScript中,有⼀个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。
这⼀策略对于JavaScript代码能够访问的页⾯内容做了很重要的限制,即JavaScript只能访问与包含它的⽂档在同⼀域下的内容。
所谓同源是指,域名,协议,端⼝相同。
在JavaScript中,有⼀个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。
这⼀策略对于JavaScript代码能够访问的页⾯内容做了很重要的限制,即JavaScript只能访问与包含它的⽂档在同⼀域下的内容。
所谓同源是指,域名,协议,端⼝相同。
在JavaScript中,有⼀个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。
这⼀策略对于JavaScript代码能够访问的页⾯内容做了很重要的限制,即JavaScript只能访问与包含它的⽂档在同⼀域下的内容。
所谓同源是指,域名,协议,端⼝相同。
在JavaScript中,有⼀个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。
这⼀策略对于JavaScript代码能够访问的页⾯内容做了很重要的限制,即JavaScript只能访问与包含它的⽂档在同⼀域下的内容。
所谓同源是指,域名,协议,端⼝相同。
在JavaScript中,有⼀个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。
这⼀策略对于JavaScript代码能够访问的页⾯内容做了很重要的限制,即JavaScript只能访问与包含它的⽂档在同⼀域下的内容。
所谓同源是指,域名,协议,端⼝相同。
在JavaScript中,有⼀个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。
这⼀策略对于JavaScript代码能够访问的页⾯内容做了很重要的限制,即JavaScript只能访问与包含它的⽂档在同⼀域下的内容。
所谓同源是指,域名,协议,端⼝相同。
在JavaScript中,有⼀个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。
这⼀策略对于JavaScript代码能够访问的页⾯内容做了很重要的限制,即JavaScript只能访问与包含它的⽂档在同⼀域下的内容。
所谓同源是指,域名,协议,端⼝相同。
在JavaScript中,有⼀个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。
这⼀策略对于JavaScript代码能够访问的页⾯内容做了很重要的限制,即JavaScript只能访问与包含它的⽂档在同⼀域下的内容。
所谓同源是指,域名,协议,端⼝相同。
在JavaScript中,有⼀个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。
这⼀策略对于JavaScript代码能够访问的页⾯内容做了很重要的限制,即JavaScript只能访问与包含它的⽂档在同⼀域下
的内容。
所谓同源是指,域名,协议,端⼝相同。
</div>
<div >
⽐如⼀个⿊客程序,他利⽤IFrame把真正的银⾏登录页⾯嵌到他的页⾯上,当你使⽤真实的⽤户名,密码登录时,他的页⾯就可以通过Javascript读取到你的表单中input中的内容,这样⽤户名,密码就轻松到⼿了。
⽐如⼀个⿊客程序,他利⽤IFrame把真正的银⾏登录页⾯嵌到他的页⾯上,当你使⽤真实的⽤户名,密码登录时,他的页⾯就可以通过Javascript读取到你的表单中input中的内容,这样⽤户名,密码就轻松到⼿了。
⽐如⼀个⿊客程序,他利⽤IFrame把真正的银⾏登录页⾯嵌到他的页⾯上,当你使⽤真实的⽤户名,密码登录时,他的页⾯就可以通过Javascript读取到你的表单中input中的内容,这样⽤户名,密码就轻松到⼿了。
⽐如⼀个⿊客程序,他利⽤IFrame把真正的银⾏登录页⾯嵌到他的页⾯上,当你使⽤真实的⽤户名,密码登录时,他的页⾯就可以通过Javascript读取到你的表单中input中的内容,这样⽤户名,密码就轻松到⼿了。
⽐如⼀个⿊客程序,他利⽤IFrame把真正的银⾏登录页⾯嵌到他的页⾯上,当你使⽤真实的⽤户名,密码登录时,他的页⾯就可以通过Javascript读取到你的表单中input中的内容,这样⽤户名,密码就轻松到⼿了。
⽐如⼀个⿊客程序,他利⽤IFrame把真正的银⾏登录页⾯嵌到他的页⾯上,当你使⽤真实的⽤户名,密码登录时,他的页⾯就可以通过Javascript读取到你的表单中input中的内容,这样⽤户名,密码就轻松到⼿了。
⽐如⼀个⿊客程序,他利⽤IFrame把真正的银⾏登录页⾯嵌到他的页⾯上,当你使⽤真实的⽤户名,密码登录时,他的页⾯就可以通过Javascript读取到你的表单中input中的内容,这样⽤户名,密码就轻松到⼿了。
⽐如⼀个⿊客程序,他利⽤IFrame把真正的银⾏登录页⾯嵌到他的页⾯上,当你使⽤真实的⽤户名,密码登录时,他的页⾯就可以通过Javascript读取到你的表单中input中的内容,这样⽤户名,密码就轻松到⼿了。
</div>
<!-- 反向嵌⼊A域的页⾯ -->
<iframe name="domainA" src="" ></iframe>
<!-- script -->
<script type="text/javascript">
iframe嵌套页面加载慢//隐藏或显⽰div
function btnClick() {
var div = ElementsByTagName("div");
for(var i in div) {
if(i<div.length)
div[i].style.display = (div[i].style.display == 'none') ? "block" : "none";
}
}
</script>
<script type="text/javascript">
function proxy(){
/
/alert("btn click");
//获取本页⾯的⾼度
var scrollHeight = document.documentElement.scrollHeight;
//alert("滚动条⾼度:"+scrollHeight);
//将窗⼝的⾼度先设置到属于domainA的iframe的src属性上
var iframeDomainA = ElementsByName("domainA")[0];
//⽤domainA的⼀个页⾯作为代理,最终的⽬的是解决“同源策略”的限制
var url = "localhost:9000/agent";
/**技巧:通过时间戳让浏览器每次重新加载iframe,这样每次都会⾃动设置被嵌套的iframe的⾼度,避免了使⽤setInterval()*/
iframeDomainA.src = url+ "? time=" + new Date().getTime() + "#" + scrollHeight ;
}
</script>
</body>
</html>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论