调整动态生成的iframe的大小

时间:2012-06-25 22:59:53

标签: javascript jquery oracle-apex

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

            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高度,我在文档中有以下代码).ready(页面的function()

            $('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";                    
            }
        }
            );

如果没有对iResize函数的setTimeout调用,则不会发生iframe调整大小。但是这个setTimeout在调整大小的iframe中添加了一个延迟,我想避免它。有没有办法做到这一点?我在网上看到的所有相关帖子/文章都处理了内置在页面中的iframe,但并未像我的情况那样即时生成。

如果您需要更多信息,请与我们联系。请帮忙。谢谢。

3 个答案:

答案 0 :(得分:1)

您应该考虑将详细信息放在&lt; div&gt;中阻止,然后显示或隐藏&lt; div&gt;用JQuery。您可以使用CSS为块设置尺寸,或者让内容在块内正常流动。听起来像是一种更简单的方法来达到同样的效果。

答案 1 :(得分:0)

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

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

parent.iResize();

这似乎对我有用。

答案 2 :(得分:0)

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

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