Javascript SetInterval()在Firefox中只触发一次

时间:2012-06-25 18:56:42

标签: javascript firefox timer

  

可能重复:
  setInterval not working (firing only once) in Google Chrome extension

使用document.write()时,此错误只是一个问题。

我在Mac 10.6.8 Intel。

这是我的剧本:

setInterval(function(){myFun()},1000);

function myFun() {
   document.write('something');
}

各种浏览器的行为有所不同: Firefox 12:只发生一次。浏览器在状态栏中显示“正在连接”。 谷歌浏览器和Safari:似乎工作正常。

注意:使用setTimeout会导致所有内容都像firefox(不工作)一样。 使用setInterval(myFun),1000),这应该是这么多错误的来源,行为相同。

4 个答案:

答案 0 :(得分:1)

许多初学教程都将document.write()用于“hellow world”。但是,这个功能很危险,因为它可能会破坏脚本(通过编制整个程序)。这是一种安全的调试打印输出方式:

之前脚本,在html和html之间添加:

<div id="myDebug"></div>

脚本中,首先将其转换为可以调用的变量:

var myDebug = document.getElementById("myDebug");

当您需要展示某些内容时,请执行以下操作:

debug.innerHTML = "some string";

这将在浏览器窗口中显示字符串。

答案 1 :(得分:0)

似乎你在myFun()之后错过了分号

setInterval(function(){myFun();},1000);

function myFun() {
   document.write('something');
}

还要确保将该功能放在<body></body>

答案 2 :(得分:0)

document.open()会导致文档清除。在document.write()之前,Firefox会调用此函数。因此你的间隔就会丢失。

请参阅W3C Document Object Model HTML

答案 3 :(得分:0)

试试这个:

setInterval(function(){myFun()},1000);

function myFun() {
   // Return all elements in document of type 'body'
   // (there will only be one)
   var bodyArray = document.getElementsByTagName('body');
   // get the body element out of the array
   var body = bodyArray[0];
   // save the old html of the body element
   var oldhtml=body.innerHTML;
   // add something to the end
   body.innerHTML=oldhtml+"somrthing";
}

正如其他人所提到的,使用document.write()会(在某些浏览器中)核对用于更新文档的脚本,写入正文(而不是应该存储javascript的头部)将阻止此happing。