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>';

詳細レコードごとに異なる iFrame の高さをサイズ変更するために、ページの document).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

ページが最初に読み込まれたときもiframeが存在しないように思えます。

ページの読み込み時にiResize関数を呼び出してから毎秒呼び出す代わりに、iframeを作成するコードでiResizeを呼び出すことができます。

于 2012-07-03T16:48:22.000 に答える
0

問題は、サイズ変更をすぐに実行すると、完全にレンダリングされる前に子ドキュメントのサイズが取得されるため、タイマーが使用されることです。

詳細レポートが制御する他の A​​PEX ページである場合は、詳細ページの「ページの読み込み時に実行」セクションから iResize 関数を呼び出すことができます。

parent.iResize();

それは私にはうまくいくようです。

于 2012-06-26T14:52:20.990 に答える