采用JavaScript来控制iframe元素的高度是iframe高度自适应的关键,同时由于JavaScript对不同域名下权限的控制,引发出同域、跨域两种情况。

由于客户端js使用浏览器的同源安全策略,跨域情况下,被嵌套页面如果想要获取和修改父页面的DOM属性会出现权限不足的情况,提示错误:Permission denied to access property 'document'。这是因为除了包含脚本的文档载入的主机外,同源策略禁止客户端脚本链接到其他任何主机或者访问其他任何主机的数据。这意味着访问一个web服务的javascript代码通常只有在它也驻留在Web服务本身所在的同一个服务器的时候才有用。

所以在跨域情况下,我们遇到的问题就是:父窗口无法获得被嵌套页面的高度,而且被嵌套页面也无法通过驻留在其服务器上的js修改父窗口Dom节点的属性。所以我们需要一个媒介,来获得被嵌套页面的高度同时又能修改主界面iframe节点的高度。

思路:现有主界面main在域a下,被嵌套页面B在域b下,被嵌套页面B又嵌套一个在域a下的中介页面A。当用户打开浏览器访问mail.html的时候载入B,触发B的onload事件获取其自身高度,然后B载入A,并将高度值作为参数赋值给A的location对象。这样A就可以通过location.hash获得B的高度。(location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url。而location.hash则可以用来获取或设置页面的标签值。比如http://domain/#admin的location.hash="#admin"。利用这个属性值可以做一些非常有意义的事情。)。由于A和main页面同域,所以可以修改main的dom节点属性,从而达到我们设置iframe标签高度的目的。

      嵌入iframe,且iframe的src是跨域的页面的高度自适应

关键代码:

iframe主页面:main.html

<iframe id="iframeB"  name="iframeB" src="www.b.com/B.html" width="100%" height="auto" scrolling="no" frameborder="0"></iframe>

iframe嵌套页面:B.html

<iframe id="iframeA" name="iframeA" src="" width="0" height="0" style="display:none;" ></iframe>
<script type="text/javascript">
function sethash(){
hashH = document.documentElement.scrollHeight; //获取自身高度
urlC = "www.a.com/A.html"; //设置iframeA的src
document.getElementByIdx_x_x_x("iframeA").src=urlC+"#"+hashH; //将高度作为参数传递
}
window.onload=sethash;
</script>

中介页面:A.html

<script>
function pseth() {
var iObj = parent.parent.document.getElementByIdx_x_x_x('iframeB');//A和main同域,所以可以访问节点
iObjH = parent.parent.frames["iframeB"].frames["iframeA"].location.hash;//访问自己的location对象获取hash值
iObj.style.height = iObjH.split("#")[1]+"px";//操作dom
}
pseth();
</script>

同域情况下就不用多说了,直接在被嵌套的页面B中获取其自身高度并操作其父窗口main的dom属性即可。

神策下的页面都是链接到其他域的页面,此时要做自适应高度就会涉及到跨域下的iframe自适应高度

跨域下的iframe自适应高度相关推荐

  1. iframe 自适应高度的多种实现方式

    iframe高度自适应内容 需求:实现 iframe 的自适应高度,能够随着页面的长度自动的适应以免除页面和 iframe 同时出现滚动条的现象. 设置iframe 自适应高度,使其等于内嵌网页的高度 ...

  2. vue通过postMessage实现iframe自适应高度,支持跨域

    通过消息传递实现iframe自适应高度,支持跨域. 父页面监听消息 <template><iframe id="processFrame" name=" ...

  3. Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐[转]

    Iframe自适应高度绝对好使的代码,IE.遨游.火狐.Chrome都兼容,需要的朋友可以参考下. 这是我试了很多相关代码后发现的兼容性最好的Iframe自适应高度代码. <script typ ...

  4. [转]让iframe自适应高度-真正解决

    原文地址:https://www.cnblogs.com/rogge7/p/7762052.html 需求:实现 iframe 的自适应高度,能够随着页面的长度自动的适应以免除页面和 iframe 同 ...

  5. 【前端开发】前端引入公共部分footer header的几种方法,及iframe自适应高度js

    一.引入页面几种方法 1.IFrame引入,看看下面的代码  <iframe   frameborder=0   border=0   width=300   height=300   src= ...

  6. php iframe 自适应高度,两个iframe自适应高度的解决方法

    很多小伙伴在做网站的时候对于解决 1.需求分析: 使页面中的iframe可以自适应高度,避免页面高度增加的时候页面和iframe会同时出现滚动条. 2.方法一: 在iframe上面直接加onload的 ...

  7. Cookie 跨域解决方案(IFrame跨域)

    IFrame跨域思路:假设有a.haorooms.com/text.html和b.haorooms.com/text.html两个页面,通过a.haorooms.com/text.html页面去修改b ...

  8. php iframe 自适应高度,iframe自适应高度

    很多小伙伴在做网站的时候对于解决iframe的高度问题都是很头大的一件事,今天吾爱编程为大家介绍一下iframe自适应高度的方法,有需要的小伙伴可以参考一下: 1.需求分析: 使页面中的iframe可 ...

  9. php iframe 自适应高度,让iframe自适应高度的讲解

    为什么需要使用iframe自适应高度呢?其实就是为了美观,要不然iframe和窗口长短大小不一,看起来总是不那么舒服,特别是对于我们这些编程的来说,如鲠在喉的感觉.在页面中通过iframe嵌入了另外一 ...

最新文章

  1. RabbitMQ消息队列系列教程(一)认识RabbitMQ
  2. Mysql 安装服务无法启动解决方案与使用的一般使用指令
  3. PHP判断是否有Get参数的方法
  4. Linux--Linux Shell 中的反引号,单引号,双引号
  5. 内存泄漏和内存溢出的优化
  6. Mysql 行转列,列转行
  7. U3D性能分析 Profiling
  8. gitee项目能用SVN拉取吗_基于SpringBoot的车牌识别系统(附项目地址)
  9. 分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践
  10. 灵思致远测色仪色差宝和颜色识别器APP介绍
  11. vscode调试cpp环境,手动安装vsix
  12. 一次spinlock死锁故障的定位(太经典,收藏!)
  13. 软件附带有广告如何消除
  14. matlab模糊控制图怎么导出_matlab模糊控制工具箱的使用
  15. 宇宙中最大的神秘结构被发现 跨度达40亿光年
  16. 用python玩转数据测试与作业_用python玩转数据-实验5
  17. 【web渗透思路】框架敏感信息泄露(特点、目录、配置)
  18. 使用d3.js开发力导向图
  19. 二叉树、红黑树 详解
  20. 查看PHP版本的方法

热门文章

  1. 什么是哈希冲突?怎么解决哈希冲突。
  2. pde中微元分析法的主要思想_调和分析中的四大猜想及PDE的现代研究
  3. 多任务系统(操作系统)
  4. Springboot集成knife4j,Failed to start bean ‘documentationPluginsBootstrapper‘;导致系统不能正常启动
  5. 无线定位技术实验二 TDOA最小二乘定位法
  6. MySQL 8 小时断开连接问题解决
  7. 13款网站在线性能测试工具
  8. 数据分析——用户消费行为分析
  9. python 自建ip地址池详细教程
  10. 【爬虫】IP代理池调研