我尝试编写一个可以打开和关闭的自我更新的iFrame。我遇到了一些问题。我设法让按钮很容易工作,并使他们能够改变我的exe值,这应该是实际重新加载过程的触发器。
现在,这看起来很容易,但我已经尝试了我的想法,而且我对JavaScript不太熟悉。 - 睡眠功能在别处进行,以便我可以重新加载页面,在重新加载之前睡眠x毫秒(当启动按钮是活动按钮时)。
问题是让帧实际更新,并根据exe值执行。我尝试了一段时间的陈述,但即使是我的卧铺,它只是看到它是一个无限循环并冻结,让我无法用按钮控制它。我尝试用if语句创建一个函数来查看Javascript是否以某种方式继续调用代码,但事实并非如此......所以现在我对如何解决这个问题并使页面实际上有点困惑每次重装。
<!DOCTYPE html>
<html>
<head>
<title>Updater</title>
</head>
<body>
<script language="javascript">
var exe = 1;
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
function reload() {
document.getElementById('update_frame').contentWindow.location.reload(true);
sleep();
}
if (exe == 1) {
windows.setInterval(reload(), ms);
}
function start() {
exe = 1;
}
function stop() {
exe = 0;
}
</script>
<IFRAME name="update_frame" src="http://www.google.com" width="300" height="200" scrolling="no" frameborder="0" marginwidth="0" marginheight="0"></IFRAME>
<br />
<button onclick="start()">Start</button>
<button onclick="stop()">Stop</button>
</body>
</html>
解决这个难题的提示将受到关注!提前致谢:D
答案 0 :(得分:1)
首先改变:
windows.setInterval(reload(), ms);
为:
windows.setInterval(reload, ms);
reload()调用一个函数并返回一个结果,该结果作为参数提供给setInterval。并且你不希望这样,因为你想作为参数提供一个函数,而不是它的结果。
答案 1 :(得分:0)
为了正确停止,您需要在间隔中存储句柄以便稍后清除:
var itvlReload;
function start() {
itvlReload = setInterval(reload, ms);
}
function stop() {
clearInterval(itvlRload);
}
这消除了对exe
变量的需求。
或者,在重新加载功能中,查询exe
:
function reload() {
if (exe) {
document.getElementById('update_frame').contentWindow.location.reload(true);
}
}
最后,你实际上并不需要sleep()
(它实际上非常糟糕,因为即使在&#34;闲置&#34;)它也会使用周期,因为你&#39;重新使用间隔。