Допустим, у меня есть метод javascript, который занимает немного или много времени, чтобы завершить работу без какой-либо обратной связи с пользователем. В моем случае это сортировка строк в элементе таблицы (все в DOM; это занимает слишком много времени, если имеется lot строк), но это может сделать что угодно. Я хочу показать курсор прогресса, пока он работает. Вот то, что у меня есть в настоящее время, но я пробовал и несколько других вещей:
// SORT
document.body.style.cursor = "progress";
MyLongRunningMethod(); //blocks for 10-15 seconds before returning
document.body.style.cursor = "auto";
К сожалению, ничего не происходит. MyLongRunningMethod () делает все правильно, но курсор никогда не меняется. Я думаю, что браузер должен ждать, пока метод вернется, чтобы иметь возможность обрабатывать сообщение об изменении курсора, генерируемое средой управления окнами, но это может быть далеко, и даже если это правда, я не знаю, как это исправить.
Есть еще идеи?
[править]: Я решил, что весь рассказ, который у меня был, не был действительно необходим. Если вы действительно хотите прочитать его, проверьте историю изменений.
Окончательные результаты
В итоге я воспользовался решением Роборга. Он не так сильно портит код, как я первоначально думал, потому что я могу сохранить функцию, объявленную прямо там, - это все равно, что добавить встроенный блок контекста.
Интересно, что в Firefox я обнаружил, что это означает, что мне вообще не нужно менять курсор. Я обнаружил, что после того, как я добавил вызов setTimeout, я иногда видел, как курсор ожидания показывался до того, как был установлен курсор прогресса, поэтому я закомментировал свой код курсора. Оказывается, что что-то в использовании setTimeout для выталкивания этого из самого обработчика события click позволяет FireFox самостоятельно определять, что курсор должен измениться. К сожалению, IE не такой умный, поэтому я вернул код курсора обратно.
Это подтверждает мою уверенность в том, что смена курсора является подходящим действием & mdash; учитывая возможность, это то, что браузер будет делать в любом случае. Я действительно не хочу добавлять и удалять новые элементы (например, изображение какого-то типа) в DOM для страницы, о которой я очень мало знаю. Сценарий должен соответствовать независимо от того, какой визуальный дизайн использует страница.
Наконец, Chrome делает все это неактуальным. Используя те же данные, Chrome делает менее чем за 5 секунд, на что IE и Firefox потребовалось 10-15 секунд. Таким образом, их движок JavaScript действительно быстрее. Я не могу ждать двигателя Firefox 3.1. К сожалению, люди все еще в основном используют IE6.