2011-09-13 8 views
1

次のコードがWebKitベースのブラウザ(Chrome/Safari)でうまく動作するが、FFがハングしてIEに何も書き込まない理由を知っている人は誰ですか?それが正常に動作します(しかし、私はhttp://blog.livz.org/post/More-responsive-UI-with-setTimeout-on-WebKit.aspxで議論するように、他の副作用を持っている)私はのsetTimeoutを(使用しませんwriteOutDirect()を使用している場合があります。setTimeoutバグIE/FFの反復を使用して

<html> 
<head> 
    <script> 
     function doIteration() { 
      for (i=0;i<10;i++) { 
       writeOut(i); 
       //writeOutDirect(i);     
      } 

     } 

     function writeOut(i) { 
      setTimeout(function() { 
       document.write(i+'<br/>'); 
      },0); 
     } 

     function writeOutDirect(i) { 
      document.write(i+'<br/>'); 
     } 
    </script> 
</head> 
<body onload="doIteration()"> 

</body> 

答えて

1

あなたはここで与えたスクリプトが書き出すんdocument.write()は、ページの読み込み中に呼び出された場合にのみコンテンツをドキュメントに追加します。ページの読み込みが完了した後に呼び出すと、現在のドキュメントが指定した内容で置き換えられますdocument.open()が暗示されています)。現在のドキュメントがなくなると、タイムアウトもすべて消えてしまいます。タイムアウトが1回だけ実行されます(0)、それはドキュメントを置き換え、他のすべてのタイムアウトはキャンセルされます。

現在のドキュメントをdocument.open()で置き換えると、既存のタイムアウトが強制終了されず、単に新しいドキュメントで操作されます。バグであっても、少なくとも他のすべてのブラウザとは互換性がありません。私は、既存の標準が、このケースでタイムアウトをキャンセルする必要があるかどうかを明確に記述しているかどうかはわかりません。

+0

ありがとうございますウラジミール - 理にかなっています。 – weblivz

0

document.body.appendChild()をdocument.write.exendChild()を使用してdocument.writeを使用すると、将来的に参照することができます。

関連する問題