2012-06-25 28 views
0

我有一个由Oracle Apex(针对Oracle数据库操作的UI工具)生成的报告。我已经对它进行了自定义,每个记录上都有一个超链接,点击后会在当前记录下的iframe右侧打开详细报告。此,我通过使用JavaScript的insertRow方法的HTML表格元素做(下面冷凝Javascript代码。甲骨文APEX允许使用JS/Jquery的的)调整动态生成的iframe的大小

  var pTable= html_CascadeUpTill(t,'TABLE'); 
     var myNewRow = pTable.insertRow(pTR.rowIndex+1); 
    var myNewCell = myNewRow.insertCell(0); 
      myNewCell.innerHTML = '<iframe src="detail report url" height="0"></iframe>'; 

为了调整大小是不同的iFrame的高度针对不同的详细记录,我在文档中的页面

  $('iframe').load(function() 
      { 
       setTimeout(iResize, 1000); 
      } 
function iResize() 
     { 
      // Iterate through all iframes in the page. 
      for (var i = 0, j = iFrames.length; i < j; i++) 
      { 
var y=(iFrames[i].contentWindow || iFrames[i].contentDocument); 
if (y.document)y=y.document; 
var docHt = getDocHeight(y); 
if (docHt) iFrames[i].height = docHt + "px";      
      } 
     } 
      ); 

没有setTimeout调用到iResize功能下面的代码)。就绪(函数(),在iframe调整大小没有发生。但是,这是的setTimeout加入我想避免出现重新调整大小的iframe中的延迟。有没有办法做到这一点?所有相关的帖子/文章我见过onlin e处理内置在页面中的iframe,但不像我的情况那样生成。

让我知道你是否需要更多信息。请帮忙。谢谢。

回答

0

问题是,如果您过早地执行调整大小,它将在完全呈现之前获取子文档的维度,因此会使用计时器。

如果您的详细报告是您控制其他APEX页面,那么你可以从调用iResize功能“执行时,页面加载”的详细信息页面的部分:

parent.iResize(); 

这似乎为我工作。

+0

谢谢@Tony。我试过了,但没有奏效。它实际上阻止了细节记录被渲染。 – JavaDev

1

你应该考虑把细节放在<div>块中,然后用jQuery显示或隐藏<div>。你可以用CSS为你的块设置尺寸,或者让内容在块内正常流动。听起来像是一个更简单的方法来达到相同的效果。

0

这听起来像当页面首次加载时甚至不存在iframe。

不是在页面加载时调用iResize函数,而是每秒钟都可以将调用放入创建iframe的代码中的iResize。