1

重複の可能性:
Google Chrome 拡張機能で setInterval が機能しない (1 回だけ起動する)

このエラーは、document.write() が使用されている場合にのみ問題になります。

私は Mac 10.6.8 Intel を使用しています。

これが私のスクリプトです:

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

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

さまざまなブラウザーで動作が異なります: Firefox 12: 1 回だけ発生します。ブラウザのステータスバーに「接続中」と表示されます。Google Chrome と safari: 正しく動作しているようです。

注: 代わりに setTimeout を使用すると、すべてが firefox のように動作します (機能しません)。おそらく多くのエラーの原因である setInterval(myFun},1000) を使用すると、同じように動作します。

4

4 に答える 4

1

多くの初歩的なチュートリアルでは、"hello world" に document.write() を使用しています。ただし、この機能はスクリプトを台無しにする可能性があるため (プログラム全体を無効にすることによって) 危険です。デバッグ出力を行う安全な方法は次のとおりです。

スクリプトの前、html の と の間に、これを追加します。

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

スクリプトでは、最初にそれを呼び出し可能な変数に変換します。

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

何かを表示する必要がある場合は、次のようにします。

debug.innerHTML = "some string";

これにより、ブラウザ ウィンドウに文字列が表示されます。

于 2012-06-25T19:33:45.257 に答える
0

document.open()その結果、ドキュメントがクリアされます。この関数は、Firefoxの前に呼び出されdocument.write()ます。したがって、間隔が失われます。

W3CドキュメントオブジェクトモデルHTMLを参照してください

于 2012-06-25T19:29:24.387 に答える
0

myFun() の後のセミコロンを見逃しているようです

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

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

また、必ず関数を入れてください<body></body>

于 2012-06-25T19:24:28.630 に答える
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 を格納する必要のある head ではなく) に書き込むと、これが発生しなくなります。

于 2012-06-25T19:35:41.233 に答える