В моем приложении ASP.Net, которое является тяжелым javascript и jQuery, но также использует главные страницы и фрагменты .Net Ajax, я постоянно вижу в строке состояния IE 6 (и иногда IE 7) сообщение «2 элемента осталось "или" осталось 15 элементов ", за которым следует" загрузка somegraphicsfile.png | gif . " Это сообщение никогда не исчезнет и может или не может помешать запуску некоторых функциональных возможностей страницы (оно наверняка застопорилось, но я не уверен).
Я могу заставить это произойти в 99% случаев, просто обновив возраст .aspx, но количество элементов и, иногда, файл, который он упоминает, различаются. Обычно это 2, 3, 12, 13 или 15.
Я гуглил ответы, и есть несколько предложений или объяснений. Некоторые из них не работают для нас, а другие не практичны для нас, чтобы реализовать или попробовать.
Вот некоторые идеи / теории:
IE не кэширует изображения правильно, поэтому он неоднократно запрашивает одно и то же изображение, если изображение повторяется на странице, и сервер предполагает, что оно должно кэшироваться локально, поскольку оно уже было обработано в контексте этой страницы. IE отображает изображения правильно, но сидит и ждет ответа сервера, который никогда не приходит. Обычно файл, в котором говорится, что он ожидает, повторяется на странице.
На странице используется PNG-графика с прозрачностью. Это действительно так, но это графические изображения, сгенерированные Themeroller в jQuery-UI, которые, по мнению людей из jQuery-UI, безопасны для IE. Компоненты jQuery-UI - единственное, что использует PNG. Все наши ссылки на PNG написаны на CSS, если это поможет. Я изменил некоторые графические элементы с PNG на GIF, но с такой же вероятностью можно ожидать, что он ожидает somegraphicsfile.png , так же, как и для somegraphicsfile.gif
Изображения указываются в CSS и / или JavaScript, но находятся на объектах, которые в данный момент не отображаются (например, ни одного элемента). Это может быть верным, но если это так, то я думаю, что предварительная загрузка изображений будет работать, но пока добавление прелоадера не приносит никакой пользы.
Политика кэширования IIS сбивает с толку браузер. Если это так, то только у Microsoft server SW возникают проблемы с браузером Microsoft (что меня совсем не удивляет). К сожалению, я не контролирую конфигурацию IIS, в которой будет размещаться приложение.
Кто-нибудь видел это и нашел способ с этим бороться? В частности, в приложениях ASP.Net с jQuery и jQuery-UI?
UPDATE
Еще одна точка данных: по крайней мере на одной из страниц просто комментирование настройки компонента jQuery-UI Datepicker приводит к устранению проблемы, но я не думаю (или, по крайней мере, я не уверен), если это исправляет все страницы. Если это «исправит» их, мне придется поменять плагины, потому что эта функциональность должна быть там. Похоже, в настоящее время нет открытых проблем с jQuery-UI в IE6 / 7 ...
ОБНОВЛЕНИЕ 2
Я проверил настройки IIS и для всех моих папок было установлено , а не expiration. Отключение этого параметра было распространенным предложением для исправления этой проблемы.
У меня есть другая, более простая, страница, на которой я могу постоянно создавать ошибку. Я использую файл jQuery-UI 1.6rc6 (хотя я также пробовал jQuery-UI 1.7.1 с теми же результатами). Проблема возникает только тогда, когда я обновляю страницу, которая содержит jQuery-UI Datepicker. Если я закомментирую настройку Datepicker, проблема исчезнет. Вот несколько вещей, которые я замечаю, когда делаю это:
- На этой странице всегда написано «(осталось 1 элемент) Загрузка изображения http: ///images/Calendar_scheduleHS.gif», но только при перезагрузке.
- Когда я смотрю на протоколирование HTTP, я вижу, что оно запрашивает это изображение с сервера каждый раз, когда оно динамически включается, независимо от кэширования.
- Все запросы на эту графику выполнены и возвращают графику правильно. Ни один из них не помечен кодом 200 или 304 (указывающим, что сервер говорит IE использовать кэшированную версию). Почему на этом графике написано ожидание, когда все запросы выполнены, я понятия не имею.
- На странице есть еще один графический объект (один из файлов PNG пользовательского интерфейса) с кодом 304 (не изменен). На другой странице, где мне удалось зарегистрировать HTTP-трафик с «2 оставшимися элементами», два разных графических файла (оба PNG пользовательского интерфейса) также имели 304 (но ни один из них не был указан как «Загрузка».
- Эта ошибка не безобидна - страница не полностью отзывчива. Например, если я нажму одну из кнопок, которая должна выполнить действие на стороне клиента, страница обновится.
- Уход со страницы и возвращение не приводит к ошибке.
- Я переместил скрипт и ссылки на скрипт в конец содержимого, и это не влияет на эту проблему. Сценарий все еще выполняется в $ (document) .ready (), хотя (его слишком сложно разделить, если в этом нет необходимости).
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ И ОТВЕТ
Было много хороших ответов и предложений ниже, но ни один из них не был нашей проблемой. Самый близкий (и тот, который привел меня к решению) был о долгосрочном JavaScript, так что я наградил награду там (я думаю, я мог бы ответить на него сам, но я бы предпочел вознаграждать информацию, которая приводит к решениям) .
Вот наше решение: у нас было несколько средств выбора даты jQueryUI, которые были созданы в событии $ (document) .ready в сценарии, включенном в главную страницу ASP.Net. На этой странице клиента событие $ (document) .ready локального сценария имело сценарий, который уничтожал средства выбора даты при определенных условиях. Нам пришлось использовать «уничтожить», потому что в предыдущей версии DatePicker была проблема с «отключить». Когда мы обновили до последней версии пользовательский интерфейс jQuery (1.7.1) и заменили «destroy» на «disable» для средства выбора даты, проблема исчезла (или, по большей части, исчезла - если вы делаете слишком быстро, пока страница загружается, все еще можно получить статус «n элементов осталось».
Моя теория относительно того, что происходило, выглядит следующим образом:
- Содержимое страницы загружается и имеет 12 или
поэтому текстовые поля с указателем даты
класс.
- Создает скрипт главной страницы
указатели даты в этих текстовых полях.
- IE ставит в очередь запросы для каждого
календарь графический самостоятельно
потому что IE не знает как
правильно кэшировать динамическое изображение
запросы.
- Перед обработкой запросов,
скрипт клиентской области уничтожает
эти сборщики даты, поэтому графика
больше не нужны.
- IE остается с некоторым количеством
осиротевшие запросы, что это не
знать, что делать.