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 中具有 mo 效果。

这是我有一个 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 搞砸了这两个frames,它们并不相似。

autoresize_frames()似乎使用window.frames集合而不是frames节点列表(定义在 中autoResizeFrames())。但是,当通过此集合访问时,IE 中iframe没有contentWindow或可用,因为在 s中包含实际对象。contentDocumentwindow.frameswindowiframe

您需要直接访问frames[i].documentframes[i]window.iframe

快速修复将使用其他名称而不是frames节点列表。

于 2013-02-21T20:17:14.760 回答
1

尝试

window.setInterval(autoresize_frames, 400);

只是看看设置回调的替代方法是否有效。您可能还需要将 autoresize_frames() 函数放在 autoResizeFrames() 函数之上,以确保它在被 setInterval() 调用之前存在于内存中。

于 2013-02-21T19:57:41.477 回答