获取iframe(angular 动态页面)高度

问题比较特殊,google了好久才得到启示

开发的angular页面,需要嵌入到客户的web页中,以iframe方式。由于iframe的高度需要指定,而angular动态生成机制导致页面高度会随时变化,

就会出现2个滚动条,一个是页面本身,一个是iframe里的。

解决方法如下:

1.写一个directive监听angular的$digest,实时获取body高度,通过 HTML5 postMessage方式传出

在HTML5中新增了postMessage方法,postMessage可以实现跨文档消息传输(Cross Document Messaging),Internet Explorer 8, Firefox 3,  Opera 9, Chrome 3和 Safari 4都支持postMessage。该方法可以通过绑定window的message事件来监听发送跨文档消息传输内容。

module.directive(‘ngAppFrame‘, function () {
  return {
    restrict: ‘EA‘,
    link: function (scope, element, attrs) {
      element.css("display", "block");
      scope.$watch(
        function () {
          return element[0].offsetHeight;
        },
        function (newHeight, oldHeight) {
          if (newHeight != oldHeight) {
            setTimeout(function () {
              var height = attrs.minheight ? newHeight + parseInt(attrs.minheight) : newHeight;
              var message = height;
              window.parent.postMessage(message, "*");
            }, 0);// timeout needed to wait for DOM to update
          }
        }
      );
    }
  }
});

页面加入该directive

<div class="container-fluid " ui-view ng-app-frame></div>

2.iframe 父窗口监听message,获取iframe传出的动态高度并设定

<script>
  window.addEventListener("message", receiveMessage, false);
  function receiveMessage(event)
  {
    var iframe = document.getElementById("win");
    iframe.height = event.data;
  }
</script>
<body>
  <div class="axaHeaderbg"></div>
  <div class="axa_inner_b2c">
lt;iframe src="../../whatever" id="win" width="100%" height="100%" scrolling="no" frameborder="0" marginwidth="0<span style="white-space:pre">    </span>" marginheight="0"></iframe>
  </div>
  <div class="axaFooterbg"></div>
</body>  
时间: 2024-08-25 20:21:33

获取iframe(angular 动态页面)高度的相关文章

Python3.x:获取iframe内嵌页面的源码

Python3.x:获取iframe内嵌页面的源码 前言 在一些网页中经常会看到ifrmae/frame标签,iframe是嵌入式框架一般用来在已有的页面中嵌入另一个页面,当一个元素在iframe里时我们应该先切换到iframe里面. 语法 1.进入iframe iframe = self.driver.find_element_by_xpath("//iframe[contains(@src,'https://************/auth?e_p=1&response_type=

获取 iframe框架嵌入页面的数据

czrybj.html 获取iframe id为ifmCzrysz嵌入的内容 js $("#ifmCzrysz").contents() 获取条件列表的tjlbRow0的信息 $("#ifmCzrysz").contents().find(".zlb .tjlbRow0")

主页面获取iframe 的子页面方法。

父页面parent.html <html> <head> <script type="text/javascript"> function say(){ alert("parent.html"); } function callChild(){ myFrame.window.say(); myFrame.window.document.getElementById("button").value="调

iframe标签父页面高度自适应

注意:页面html节点上要有 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <iframe id="mainFrame" name="mainFrame" scrolling="no" src=

iframe自适应当前页面高度

<style type="text/css"> *{margin:0;padding:0;list-style-type:none;} </style> <script type="text/javascript"> $(document).ready(function(){ var iframeHeight = function () { var _height = $(window).height() - 34; $('#co

Js动态获取iframe子页面的高度总结

问题的缘由 产品有个评论列表引用的是个iframe,高度不固定于是引发这个总结. 方法1:父级页面获取子级页面的高度 给元素设置高度 这方法是用在父级页面里的,通过获取子级页面的高度给iframe设置高度 涉及了一些兼容问题: IE用attachEvent | 3C用onload来判断子页面是否加载完成. IE用contentWindow | 3C用contentDocument来获取子页面 IE用document.documentElement.scrollHeight(兼容ie6 ie7)|

iframe的跨域高度自适应(通过跨域页面中嵌套本域页面)

实习不久接到一个任务,在网页中嵌套另一个工程的网页.本以为这是轻而易举的一件事情,结果被测试姐姐折腾得够呛.多次和我谈心说到这个高度固定导致iframe出现滚动条有多么不好看,对于工程整体的影响有多么恶劣.因为跨域的原因,这个需求被拖了许久,真是很痛苦的一件事.最终在我离开公司之前搞定了这个单. 这里就把我的研究过程写下来以供大家参考. 首先需要了解一下何为同域,何为跨域: URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名

js获取iframe和父级之间元素,方法、属,获取iframe的高度自适应iframe高度

摘自:http://blog.csdn.net/kongjiea/article/details/38870399 1.在父页面 获取iframe子页面的元素 (在同域的情况下 且在http://下测试,且最好在iframe onload加载完毕后 dosomething...) js写法 a.同过contentWindow获取 也有用contentDocument 获取的 但是contentWindow 兼容各个浏览器,可取得子窗口的 window 对象.contentDocument Fir

html5 getComputedStyle + resize 实现动态宽高度等比响应式页面设计

序:通常我们只能控制div的宽度 而不能控制高度,在响应式页面里 如果要这个div是正方形那么必须的用媒体查询在不同的分辨率下写死款高度 今天突发奇想研究了个 用百分比来动态控制div的高度让其与宽度相同 成为一个正方形 甚至任何你想要比例 一,背景:目前移动端大多数图片或视频列表页面的显示,列出几个 可以看出这几个页面都有一个共同点 都有图片 双列 列表单个模块的高度相同  我演技劜他们的源码 都是讲图片设置为固定高度 然后将li撑开 li的宽度设置为50% 然后floatleft 然后用媒体