1

iframe のサイズを動的に変更するコードがいくつかあります。

function autoResizeFrames() {
    frames = document.getElementsByTagName("iFrame");
    window.setInterval("autoresize_frames()", 400);
}

function autoresize_frames() {

    for (var i = 0; i < frames.length; ++i) {
        if (frames[i].contentWindow.document.body) {
            var frames_size = frames[i].contentWindow.document.body.offsetHeight;
            if (document.all && !window.opera) {
                frames_size = frames[i].contentWindow.document.body.scrollHeight;
            }
            frames[i].style.height = frames_size + 'px';
        }
    }
}

この機能は Firefox と Chrome ではうまく機能しますが、IE 10 と 9 ではほとんど効果がありません。

ここにIFrameがあります

<div id="projectModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="projectModalLabel"
            aria-hidden="true">
            <div class="modal-header">
                   <button type="button" runat="server" onserverclick="btnClose_Click"  class="close" aria-hidden="true">
                    ×</button>
                <h3 id="projectModalLabel">Edit Project</h3>
            </div>
            <div class="modal-body">
                <iframe src="" style="width: 100%; height: 200px; border: none;" frameborder="0" id="projectFrame" name="projectFrame" scrolling="no" allowtransparency="true"></iframe>
            </div>
            <div class="modal-footer">
                      <button type="button" runat="server" onserverclick="btnClose_Click"  class="btn" aria-hidden="true">
                    Close</button>
            </div>
        </div>

IE 以外のすべての場所で機能するのはなぜですか? JavaScriptはどこでも機能すると思いましたか?

ありがとう

それは言います:

SCRIPT5007: Unable to get property 'document' of undefined or null reference 
kezcommon.js, line 62 character 5

if (frames.contentWindow.document.body) {
4

2 に答える 2

3

window.framesはネイティブDOMコレクションであり、同じ名前のノードリストを割り当てています。どういうわけか、IEはこれらの2つを台無しにしますが、これらframesは似ていません。

autoresize_frames()ノードリスト(で定義)window.framesの代わりにコレクションを使用しているようです。ただし、このコレクションを介してアクセスする場合、s内に実際のオブジェクトが含まれているため、IEには存在しないか、使用できません。framesautoResizeFrames()iframecontentWindowcontentDocumentwindow.frameswindowiframe

frames[i].documentに直接アクセスするか、にアクセスする必要がありframes[i]ます。windowiframe

framesクイックフィックスは、ノードリストの代わりに他の名前を使用することです。

于 2013-02-21T20:17:14.760 に答える
1

試す

window.setInterval(autoresize_frames, 400);

コールバックを設定する別の方法でうまくいくかどうかを確認するだけです。また、autoResize_frames()関数をautoResizeFrames()関数の上に配置して、setInterval()によって呼び出される前にメモリ内に存在することを確認する必要がある場合もあります。

于 2013-02-21T19:57:41.477 に答える