经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » HTML » 查看文章
跨域iframe如何实现高度自适应?
来源:cnblogs  作者:霍晓  时间:2019/2/14 9:22:44  对本文有异议

经常有项目会要求实现iframe高度自适应,如果是同域的还好说,如果是跨域的,父页面没有办法操作子页面,想要正确获取子页面高度的话,可以采用以下办法:

方法一:使用HTML5 postMessage

实现原理:子页面检测页面高度通过postMessage将值传给父页面

父页面: http://www.parent.com

  1. <iframe src="http://www.children.com" frameborder="0" id="iframe" scrolling="no" width="100%"></iframe>   <script>window.onload = function(){
  2.         window.addEventListener('message',function(event){if(event.origin == "http://www.children.com") {
  3.                 document.getElementById('iframe').style.height = event.data + "px";
  4.             }
  5.         })
  6.     }</script>

子页面: http://www.children.com

  1. window.onload = function () {
  2.     var h = document.body.scrollHeight;
  3.     parent.postMessage(h, "http://www.parent.com");
  4. }

 

方法二:使用iFrame Resizer插件

iFrame Resizer插件会自动检测子页面的高度传给父页面,效果比较好不需要做过多的配置,强烈推荐此方案。

父页面: http://www.parent.com

  1. <iframe src="http://www.parent.com/" frameborder="0" id="iframe" scrolling="no" width="100%"></iframe>  <script src="./iframeResizer.min.js"></script><script>iFrameResize({log:true});</script>

子页面: http://www.children.com

  1. <script src="./iframeResizer.contentWindow.min.js"></script>

方法三:采用中转页面的方法

采用“迂回”的方式解决页面高度获取问题。在主页面的域下建一个空的页面,子页面引用这个空的页面,再通过传参的方式,将子页面的高度“告知”主页面,不推荐此方案

父页面:http://www.parent.com

  1. <iframe src="http://www.children.com" frameborder="0" width="100%" id="iframe"></iframe><script type="text/javascript">function updateIFrame(height) {var iframe = document.getElementById('iframe-Scat');
  2.         iframe.setAttribute('height', height);
  3.     }</script>

子页面: http://www.children.com

拿到子页面的高度后将值重新赋给父页面下的空页面

  1. <iframe src="http://www.parent.com/blank.html" id="resize-iframe" style="display: none;"></iframe><script type="text/javascript">window.onload = function() {var h  = document.body.scrollHeight;
  2.         document.getElementById("resize-iframe").src = "http://domain1.com/c.html?height=" + h;
  3.     }</script>

空页面:http://www.parent.com/blank.html

因为此页面和父页面是同源,这时就可以直接把高度传给父页面

  1. <script type="text/javascript">window.onload = function() {var h = location.search.replace('?', '').split('=')[1];// parent.parent.document.getElementById("iframe-Scat").style.height = h + 'px';        window.top.updateIFrame(h);
  2.     }</script>

 

原文链接:http://www.cnblogs.com/huoxiao/p/10368557.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号