您现在的位置: 万盛学电脑网 >> 程序编程 >> 脚本专题 >> javascript >> 正文

iframe窗口高度自适应的实现方法

作者:佚名    责任编辑:admin    更新时间:2022-06-22

 这篇文章主要介绍了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 style="color:red;font-weight:bold">窗口自适应---绕开同源策略的限制,同时又利用同源策略,去掉iframe的滚动条,动态调整窗口的高度,让其能够显示被嵌套页面的所有内容</div> <!-- 需要动态调整高度的iframe --> <div style="text-align:center;">     <iframe name="domainB" src="http://127.0.0.1:8088/other" width="80%" scrolling="no" frameborder="0"></iframe> </div>   <script type="text/javascript">     function resize(height) {         //alert("resize");         document.getElementsByName("domainB")[0].height=height;     } </script>       agent.html     代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body>     我是代理页面哦! <script type="text/javascript">     window.onload = invokeMethodInTopWindow;      function invokeMethodInTopWindow() {         //alert("调用同域下的函数,重置iframe的高度");         var domainA = document.parentWindow;         var realHeight = domainA.location.hash.split("#")[1];         //last step:调用最上层窗口的函数,重置iframe的高度          parent.parent.resize(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 style="display:none">         在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 style="display:block">         比如一个黑客程序,他利用IFrame把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,         他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。         比如一个黑客程序,他利用IFrame把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,         他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。         比如一个黑客程序,他利用IFrame把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,         他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。         比如一个黑客程序,他利用IFrame把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,         他的页面就可以通过Java