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