Javascript 调整动态生成的iframe的大小

Javascript 调整动态生成的iframe的大小,javascript,jquery,oracle-apex,Javascript,Jquery,Oracle Apex,我有一个由Oracle Apex(一个针对Oracle数据库的UI工具)生成的报告。我已经对其进行了自定义,使其在每条记录上都有一个超链接,单击该超链接会在当前记录的正下方的iframe中打开一个详细报告。为此,我在html表元素上使用Javascript insertRow方法(下面是压缩的Javascript代码。Oracle APEX允许使用JS/Jquery) var pTable=html_cascadeoupll(t,'TABLE'); var myNewRow=pTable.ins

我有一个由Oracle Apex(一个针对Oracle数据库的UI工具)生成的报告。我已经对其进行了自定义,使其在每条记录上都有一个超链接,单击该超链接会在当前记录的正下方的iframe中打开一个详细报告。为此,我在html表元素上使用Javascript insertRow方法(下面是压缩的Javascript代码。Oracle APEX允许使用JS/Jquery)

var pTable=html_cascadeoupll(t,'TABLE');
var myNewRow=pTable.insertRow(pTR.rowIndex+1);
var myNewCell=myNewRow.insertCell(0);
myNewCell.innerHTML='';
为了调整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";                    
            }
        }
            );
$('iframe').load(函数()
{
设置超时(iResize,1000);
}
函数iResize()
{
//迭代页面中的所有iFrame。
对于(变量i=0,j=iFrames.length;i
如果没有对iResize函数的setTimeout调用,iframe resize就不会发生。但是这个setTimeout会在重新调整大小的iframe中增加延迟,我想避免出现这种情况。有没有办法做到这一点?我在网上看到的所有相关帖子/文章都涉及到iframe,它们内置在页面中,但不是像我的情况那样动态生成的


如果您需要更多信息,请告诉我。请提供帮助。谢谢。

问题是,如果您过早执行调整大小操作,它将在完全呈现子文档之前获取子文档的尺寸,因此需要使用计时器

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

parent.iResize();

这似乎对我有用。

你应该考虑把细节放在一个块中,然后用jQuery来显示或隐藏。你可以用CSS设置块的维数,或者只是让内容正常地在块中流动。听起来像是实现相同效果的一个更简单的方法。当页面第一次加载时


不要在页面加载时调用iResize函数,然后每秒都可以在创建iframe的代码中调用iResize。

谢谢@Tony。我尝试了,但没有成功。它实际上阻止了细节记录的呈现。
parent.iResize();