问题比较特殊,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[].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, "*");
}, );// 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">
<iframe src="../../whatever" id="win" width="100%" height="100%" scrolling="no" frameborder="" marginwidth="" marginheight=""></iframe>
</div>
<div class="axaFooterbg"></div>
</body>

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

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

    Python3.x:selenium获取iframe内嵌页面的源码 前言 在一些网页中经常会看到ifrmae/frame标签,iframe是嵌入式框架一般用来在已有的页面中嵌入另一个页面,当一个元素在 ...

  2. javascript获取iframe框架中页面document对象,获取子页面里面的内容,iframe获取父页面的元素,

    javascript获取iframe框架中,加载的页面document对象 因为浏览器安全限制,对跨域访问的页面,其document对象无法读取.设置属性 function getDocument(i ...

  3. 跨域下使用获取iframe的父页面URL

    通常情况下,我们获取iframe父页面的url很简单:parent.location或top.location即可,但前提是它们遵循同源策略. 当iframe与父页面不属于同一个域名时,像上面的获取会 ...

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

    父页面parent.html <html> <head> <script type="text/javascript"> function sa ...

  5. 微信小程序获取windowHeight出现不同页面高度不一致问题及解决方案

    在页面中调用wx.getSystemInfo即可获取当前页面的屏幕高度,如果写在app.js里面或者带有系统tab页面里面,获取的windowHeight会比不是tab的页面少48: 含有的TabBa ...

  6. iframe自适应当前页面高度

    <style type="text/css"> *{margin:0;padding:0;list-style-type:none;} </style> & ...

  7. iframe脸面的页面和父页面之间的交互方法

    1.iframe父页面修改iframe中的页面的信息 var obj = document.getElementById("iframeId").contentWindow;   ...

  8. Js动态获取iframe子页面的高度////////////////////////zzzz

    Js动态获取iframe子页面的高度   Js动态获取iframe子页面的高度总结 问题的缘由 产品有个评论列表引用的是个iframe,高度不固定于是引发这个总结. 方法1:父级页面获取子级页面的高度 ...

  9. 获取iframe子页面内容高度给iframe动态设置高度

    <!DOCTYPE html><html> <head> <meta charset="UTF-8" /> <meta nam ...

随机推荐

  1. Python 之定时器

    #引入库 threading import threading #定义函数 def fun_timer(): print('hello timer')   #打印输出 global timer  #定 ...

  2. SQL Server 2008 R2数据库镜像部署图文教程

    数据库镜像是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中 概述 “数据库镜像”是一种针对数据库高可用性的基 ...

  3. Maven搭建Nexus私有仓库

    下载压缩包nexus-2.13.0-01-bundle.tar.gz 解压后有两个目录 进入程序目录启动 ./nexus start 启动告警(确认用root启动把以下加入到环境变量) export ...

  4. CodeForces 651 C Watchmen

    C. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...

  5. scrapy爬虫系列之开头--scrapy知识点

    介绍:Scrapy是一个为了爬取网站数据.提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速抓取.Scrapy使用了Twisted异步网络框架,可以加快我们的下载速度. 0.说明: ...

  6. vue.js(一)

    之前看过一点vue.js但是知识点没做记录,现在也差不多不记得了,今天把以前看过的翻一遍,顺便提炼一下知识点 注意:下面的所有与vue相关的标签.指令都是写在id="app"的di ...

  7. ASP.netMVC文件下载的几种方法

    第一种:最简单的超链接方法,标签的href直接指向目标文件地址,这样容易暴露地址造成盗链,这里就不说了 第二种:后台下载 在后台下载中又可以细分为几种下载方式 首先,在前台,我们需要一个标签 &quo ...

  8. 【查看】mysql 常规书写注意事项(那些坑)

    mysql 常规书写注意事项,mysql注意事项 1. 注释:  -- 后面一定要加一个空格,否则会报错 2.注释:/*! content */ 在mysql中是会执行的,但是其他数据库不会.   例 ...

  9. mysql 数据操作 单表查询 使用正则表达式查询

    SELECT * FROM employee WHERE name REGEXP '^ale'; SELECT * FROM employee WHERE name REGEXP 'on$'; SEL ...

  10. 数据库知识,mysql索引原理

    1:innodb底层实现原理:https://blog.csdn.net/u012978884/article/details/52416997 2:MySQL索引背后的数据结构及算法原理    ht ...