我有这段代码:
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>
但现在它不起作用?有什么想法吗?
由于
答案 0 :(得分:1)
当你跑步时:
window.setInterval("autoresize_frames(frames)", 400);
您实际上是在窗口的上下文中eval
代码。使用setInterval时,应该传递对函数的引用而不是字符串。您可以在Why is using the JavaScript eval function a bad idea?
通常你会这样做:
window.setInterval(autoresize_frames, 400);
但是如果你的函数接受了参数,那么你需要将它包装在一个函数中。
以下内容可行:
window.setInterval(function() {
autoresize_frames(frames);
}, 400);
答案 1 :(得分:0)
在你自己的函数中,“frames”在内部声明。 您可以尝试删除“var”关键字,使其成为全局变量。
答案 2 :(得分:0)
我认为问题可能出现在frames
变量上,这可能无法在setInterval中访问。你可以试试这个
function autoResizeFrames() {
window.setInterval(function(){
autoresize_frames(document.getElementsByTagName("iFrame"))
}, 400);
}