关于使用Iframe自适应高度

#

项目中有一个需求是这样的,在一个JSP页面同时展示多张报表,并且提供打印功能。另外还可以通过复选框选择对应的报表内容进行展示或者打印

  1. 一、考虑到所有的报表都是使用某个报表制作器制作而成,CSS样式统一,因此多个报表之间就算使用不同的DIV进行包裹区分也会出现样式错乱的问题。后一个报表会将前一个报表覆盖,导致前面的报表样式错乱,能正确展示的报表只有一个。

    因此,在这样的需求下,使用Iframe将报表进行一个区分存放是最好不过的选择。因为Iframe之间属于不同的“域”,互相之间的HTML代码不会相互污染。 即,A页面 里面包含了B,C,D,E。4个JSP页面。
    `

<style>
        .checked_box{
            text-align: center;
        }
</style>
<style type="text/css" media="print">
        .print_ing{
        //打印的时候隐藏不相关的内容,比如打印按钮以及各种复选框==
            display : none;
        }
</style>
<!--注意这里的class: print_ing样式-->
<!--功能按钮区-->
<div class="checked_box print_ing" id="aaa">
            <button onclick="print123()">打印</button>
            <input type="checkbox" id="c1" onchange="fnChange(this)" checked="checked" value="A_jsp">报表1</input>
            <input type="checkbox" id="c2" onchange="fnChange(this)" checked="checked" value="B_jsp">报表2</input>
            <input type="checkbox" id="c3" onchange="fnChange(this)" checked="checked" value="C_jsp">报表3</input>
            <input type="checkbox" id="c4" onchange="fnChange(this)" checked="checked" value="D_jsp">报表4</input>
            <input type="checkbox" id="c5" onchange="fnChange(this)" checked="checked" value="E_jsp">报表5</input>
</div>
<!--报表内容区-->        
<div id="A_jsp" style="height:300px; margin-left: 15px;margin-right: 15px;">
            <center>    
             <report:html name="A_jsp" srcType="file" 
                XXXXX           
             /> 
           </center>
        </div>
  <!-- 通过Iframe引入 其余剩下4个报表,这里每个Iframe是要通过Src的方法返回一个完整的JSP页面的-->
  <iframe width="100%" id="B_jsp"  frameBorder=0 scrolling=no   src="Action的命名空间+方法的命名空间"></iframe>
  <iframe width="100%" id="C_jsp"  frameBorder=0 scrolling=no   src=""></iframe>
  <iframe width="100%" id="D_jsp"  frameBorder=0 scrolling=no   src=""></iframe>
  <iframe width="100%" id="E_jsp"  frameBorder=0 scrolling=no   src=""></iframe>

<!-- Iframe的高度需要在javascript里面动态设置-->
<script type="text/javascript">
//在加载子页面时,动态获取每个子页面的真实高度。这里通过<center> 标签获取。这里之所以用<center>而不用"<body>",是因为在使用了某些前端框架后,body的高度并不是我们想要的高度。这里的高度取值要根据具体情况而定,但是大致的取值思想都是差不多的。
$(document).ready(function(){
    $("iframe").load(function(){   
    //有些报表自带的iframe不存在<center>。因此这里需要做判断
    if($(this).contents().find("center")[0]){
    //关键代码,根据HTML的报表内容动态设置Iframe的高度
            $(this).height($(this).contents().find("center")[0].clientHeight+40); 
        }
    });
});
//复选框关联报表内容
function fnChange(e){
    if($(e).is(':checked')){
        $("#"+$(e).val()).show();
    }else{
        $("#"+$(e).val()).hide();
    }
}
//打印
function print123(){
//  调用浏览器自身的打印方法,打印当前整个页面。
    window.print();
}

</script>   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值