1

可能重复:
setInterval 在 Google Chrome 扩展程序中不起作用(仅触发一次)

此错误仅在使用 document.write() 时出现问题。

我在 Mac 10.6.8 英特尔上。

这是我的脚本:

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

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

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

注意:使用 setTimeout 会导致一切都表现得像 firefox(不工作)。使用 setInterval(myFun},1000),它被认为是这么多错误的来源,行为相同。

4

4 回答 4

1

许多入门教程使用 document.write() 表示“hellow world”。但是,此功能很危险,因为它可能会弄乱脚本(通过核对整个程序)。这是进行调试打印输出的安全方法:

脚本之前,在 html 和 html 之间,添加以下内容:

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

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

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

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

debug.innerHTML = "some string";

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

于 2012-06-25T19:33:45.257 回答
0

似乎您错过了 myFun() 之后的分号

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

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

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

于 2012-06-25T19:24:28.630 回答
0

document.open()导致清除文档。该函数之前被 Firefox 调用document.write()。因此,您的间隔丢失了。

请参阅W3C 文档对象模型 HTML

于 2012-06-25T19:29:24.387 回答
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 的头部)将阻止这种情况发生。

于 2012-06-25T19:35:41.233 回答