因为这是项目之后写的博客,因此这里只描述性的点出问题及解决的办法。
1、为了实现iframe动态加载页面并自适应高度,且兼容ie、FF、Chrome浏览器。以下为代码片段(引入Jquery):
$jq("#frametd").html('<iframe name="MainContent" id="MainContent'+i+'" allowtransparency=true style="width:100%;" scrolling="'+($.browser.msie?"yes":"no")+'" frameborder="0" '+($.browser.msie?"onresize=\"resize("+i+")\"":"")+'>浏览器不支持嵌入式框架,或被配置为不显示嵌入式框架。 </iframe>');
$jq("#MainContent"+i).attr("src",uri);
var iframe = $jq("#MainContent"+i)[0];
if (iframe.attachEvent){ // 解决ie不认iframe onload问题
iframe.attachEvent("onload", function(){
iframe.height=iframe.contentWindow.document.body.scrollHeight;
});
} else {
iframe.onload = function(){
iframe.height=iframe.contentWindow.document.documentElement.scrollHeight;
};
}
/** 如果页面上还有ajax动态加载的component,ie还是不能拿到正确的height,只能在resize之后,再次去获取高度,此时拿到的height才是正确的 **/
function resize(i){
setTimeout("fixactualheight("+i+")",1);
}
function fixactualheight(i){
try{
var actualheight = $jq("#MainContent"+i).contents().find("body").height()+40;
$jq("#MainContent"+i)[0].height=actualheight;
}catch(e){
setTimeout("fixactualheight("+i+")",10);
}
}
以上代码,基本上都是为兼容ie浏览器编写的,因为其他浏览器实际上只需要一句代码onload时 iframe.height=iframe.contentWindow.document.documentElement.scrollHeight;就能实现高度自适应。
为什么ie里的实现会变的这么复杂呢?这跟动态加载的uri页面复杂度有关,如果iframe src加载的页面内容简单,页面本身没有动态异步加载,那就简单了,只要这句代码iframe.height=iframe.contentWindow.document.body.scrollHeight;就能实现高度自适应。但如果加载的页面本身又是通过比较复杂的js输出页面内容,这时候用以上这句代码获取的高度就会不正确。必须等到加载对像页面全部加载完毕后,才能获取到正确的高度。那如何捕获这个事件呢,直接用onresize还是不行,必须等到resize事件之后才能捕获,因此我这里的实现是在onresize事件里,再加上setTimeout(function(){},1)来捕获。
2、iframe的scrolling,在ie里能初始化,再次修改属性不起作用
一般情况下,如果iframe插入的页面很简单,没有弹出层,那自适应高度时,把scrolling初始化成no就行。但是如果iframe插入的页面又有弹出层,而且这个弹出层的高度可能超出页面自身高度,这时候如果不出现滚动条就不合理了。
这时就要把scrolling初始化成yes。但把scrolling置成yes后,在ie下某些iframe加载的页面,会出现一条disable后的滚动条,找不到原因,因为某些页面又没有,似乎跟插入的页面也有关系,我把获取到的高度iframe.contentWindow.document.body.scrollHeight再加上一定的高度,比如再加上500,这个disable后的滚动条就会消失,可能ie对是否出现滚条的内部判断机制有点问题。暂时无解,只能容忍让其出现这个假的滚动条。本人在实现的过程中,试图动态的修改scrolling属性,发现iframe的scrolling属性在ie下不能被动态设置,脚本不报错,但不起作用。
3、在实现过程中,间接引出ie的问题1,某些ie版本会自动给你的元素加style属性
$jq(obj).removeClass().addClass("newclass");
这是一个很简单的,为某个元素切换样式的代码,但在ie下发现怎么也不起作用,debug时才发现神奇的ie自行给当前元素加上了一段style。那就毫不客气的把style也一并删除,
$jq(obj).removeAttr("style").removeClass().addClass("newclass");
4、在实现过程中,间接引出ie(仅限ie6)的问题2,给select的option元素置selected属性不起作用。
看起来跟第2点有点相似的原因,解决的办法也是setTimeout,代码如下
if($jq.browser.msie && $jq.browser.version == "6.0"){
/** ie6的一个bug,不能直接置selected值 **/
setTimeout(function() {
$jq(youroption).attr("selected",true);
}, 1);
setTimeout(function(){//你的后续业务},1);//这里一定要置1或比1大,不然获取的select值不对,因为前一步设置动作还没完成。
}else{
$jq(youroption).attr("selected",true);
//你的后续业务
}
另外,如果iframe加载时存在跨域相关问题,参考之前的博文
分享到:
相关推荐
李特伍德的《一个数学家的杂记》是一本收录了作者关于数学、教育以及个人观点文章的集合。这本杂记以数学为主题,涉及的内容包括几何、概率论、数论以及历史上的数学发现等。李特伍德在书中讨论了数学知识与日常生活...
oracle杂记.doc 这是我个人的总结。 主要是oracle的编程以及体系结构的理解。
《Oracle 9i杂记——探索PLSQL的世界》 Oracle 9i,作为Oracle数据库的一个重要版本,引入了许多新特性和改进,其中PL/SQL(Procedural Language/Structured Query Language)是其核心组成部分,是一种结合了SQL和...
总结来说,杂记中所涉及的内容实际上是对中国农村生活场景的细致观察,不仅涵盖了烹饪技艺、家庭装饰、生活细节、自然探索以及教育情感交流,还提出了社会生活中的某些敏感问题。通过这些生动的描述和细节的展开,...
- **.pdb 文件**:在调试过程中,.pdb 文件用于存储符号表和其他调试信息,帮助开发者定位和解决代码中的问题。 - **特点**: - 支持断点设置:允许开发者在特定的行设置断点进行调试。 - 代码跟踪:可以帮助...
同时,了解加密过程中的常见问题,如密钥管理、填充模式、混淆和扩散等,这些都是提高安全性的关键点。 总结来说,Java加密算法的学习涵盖了理论与实践,包括理解各种加密机制、掌握Java加密库的使用、处理异构数据...
《InstallshieldX安装制作杂记——自定义对话框的实现》 在软件开发过程中,安装程序的制作是一项不可或缺的工作。InstallshieldX作为一款强大的安装包制作工具,提供了丰富的功能,其中包括自定义对话框的创建,这...
这份学习资料可能涵盖了以下几个方面: 1. **基础知识**:首先,会介绍单片机的基本概念,包括CPU、存储器、I/O端口等硬件组成部分,以及它们的功能和工作原理。C语言的基础语法,如变量、数据类型、运算符、控制...
在本篇博文中,我们将深入探讨SpringMVC框架中的向导型Controller的实现,这是SpringMVC 3.1.1版本的一个重要特性。向导型Controller通常用于处理多步骤的用户交互流程,如购物车结账、用户注册等,它能够引导用户...
总之,“51单片机C语言学习杂记”是一个全面的教程,涵盖了51单片机的基础知识和C语言编程技巧,对于想要入门单片机开发的读者来说,是一个不可多得的学习资源。通过深入学习和实践,读者将能够熟练掌握51单片机的...
第14章 Pythonic与Python杂记.mp4
在程序下载过程中,可能会遇到无法写入程序的问题,需要从以下几个方面进行考虑:首先,要确认实际电路连接是否正确,包括电源、地线以及芯片引脚与下载器接口的连接是否正确无误。其次,检查使用的STLink下载线是否...
数据库设计是IT领域中至关重要的部分,它涉及概念设计、逻辑设计和物理设计等多个阶段。在概念设计阶段,我们主要关注实体、属性和联系集,这些都是构建数据库模型的基础元素。实体代表现实世界中的对象或事件,属性...
总的来说,InstallshieldX安装制作杂记这份资料涵盖了从基础到进阶的多个层面,无论是初学者还是经验丰富的开发者,都能从中获益,提升安装包制作的专业水平。通过深入学习和实践,你将能够制作出更加稳定、用户友好...
在本项目中,"ddddocr杂记,使用ddddocr、flask" 主要涉及的是一个基于Python的OCR(Optical Character Recognition,光学字符识别)应用,利用ddddocr库进行文字识别,并结合Flask框架构建了一个后端服务。...
Hadoop大数据平台运维杂记是关于Hadoop大数据平台的运维经验总结,主要涵盖了Hadoop集群的使用情况、安装升级、Cloudera Manager、Hadoop的发展历程、常见事故处理等方面的内容。 一、Hadoop集群使用情况 Hadoop...
在本篇《SpringMVC杂记(五) JSR303数据验证》中,我们将深入探讨SpringMVC框架如何集成并使用JSR303(JavaBeans Validation)来进行数据验证,这是一种强大的验证机制,可以确保应用程序接收到的数据是合法且符合...
3. **51单片机C语言特性**:C语言在51单片机上的实现有一些特殊之处,比如位操作、中断服务函数、IO端口操作等。要理解如何在C语言中直接操作硬件资源。 4. **中断系统**:理解中断的概念,学习如何在C语言中设置...
installshield安装制作杂记 installshield x