0

我有一份由 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>';

为了针对不同的详细记录resize不同的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。

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

4

3 回答 3

1

您应该考虑将详细信息放在 <div> 块中,然后使用 JQuery 显示或隐藏 <div>。您可以使用 CSS 为您的块设置尺寸,或者只是让内容在块内正常流动。听起来是一种更简单的方法来实现相同的效果。

于 2012-06-27T15:01:29.557 回答
0

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

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

parent.iResize();

这似乎对我有用。

于 2012-06-26T14:52:20.990 回答
0

在我看来,页面首次加载时 iframe 甚至都不存在。

您可以在创建 iframe 的代码中调用 iResize,而不是在页面加载时调用 iResize 函数,然后每隔一秒调用一次。

于 2012-07-03T16:48:22.000 回答