0

我有这个代码:

var frames = document.getElementsByTagName("iFrame");
var auto_resize_timer = 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';
        }
    }
}

那工作得很好。

然后,我决定把它放在自己的模块中:

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

function autoresize_frames(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';
        }
    }
}

并像这样在页面中运行它:

<script type="text/javascript">

    $(document).ready
(
     function () {
         autoResizeFrames();
     }

    );

</script>

但是现在不行了?任何想法为什么?

谢谢

4

3 回答 3

1

当你运行时:

    window.setInterval("autoresize_frames(frames)", 400);

您实际上eval是在窗口的上下文中编写代码。使用 setInterval 时,您应该传递对函数的引用而不是字符串。您可以阅读为什么 eval 不好为什么使用 JavaScript eval 函数是个坏主意?

通常你会这样做:

    window.setInterval(autoresize_frames, 400);

但是,如果您的函数需要参数,那么您需要将其包装在一个函数中。

以下将起作用:

window.setInterval(function() {
  autoresize_frames(frames);
}, 400);
于 2013-02-21T15:27:37.743 回答
0

在您自己的函数中,“框架”是在内部声明的。您可以尝试删除“var”关键字,使其成为全局变量。

于 2013-02-21T15:26:44.690 回答
0

我认为问题可能出frames在 setInterval 中可能无法访问的变量上。你可以试试这个

function autoResizeFrames() {
    window.setInterval(function(){
         autoresize_frames(document.getElementsByTagName("iFrame"))
    }, 400);
}
于 2013-02-21T15:30:44.413 回答