3

長時間実行される同期XmlHttpRequestの開始時にグローバル ページ カーソル ( cursor: wait !important;onを使用) を設定しようとしています(同期は私が知っているが、今は心配する必要はありません) が、ブラウザー (Chrome でのテスト) は更新されません。スクリプトから制御が返されるまで、カーソルは長時間実行される操作が終了するまで発生しません。document.body

これは、非同期の XmlHttpRequests でうまく機能します (したがって、同期のものを非同期に移行することは明らかに 1 つの解決策です)。

現在の同期操作を中断せずにブラウザにカーソルを更新させる方法はありますか?

4

1 に答える 1

3

Teemuが上でコメントしたように、たとえゼロミリ秒であっても、関数の実行を遅らせる必要があります(これにより、イベントループの次のティックにスケジュールされ、ブラウザーが開始する前にUIを更新する機会が与えられます)。

// change cursor
document.body.style.cursor = "wait !important";

// call long-running function from setTimeout
setTimeout(longRunningFunction, 0);

これが私が知っている唯一の解決策ですが、「現在のロジックの多くは同期していることを前提に記述されている」と述べているため、効果的に非同期で開始するため、うまくいかない場合があります。

于 2013-01-17T20:19:26.887 に答える