Проблемы API Chrome History - PullRequest
6 голосов
/ 23 ноября 2011

У меня проблемы с веб-сайтом Chrome.

Большая часть сайта использует ajax / xmlhttprequest для загрузки страниц и API истории, чтобы включить кнопку возврата.Только содержимое страницы изменяется с запросом, меню и т. Д. Никогда не перезагружаются.Это просто повторно запускает запрос ajax для предыдущей страницы.Это все работает нормально, пока кто-то не нажмет кнопку «Назад» после просмотра блога.Блог не загружен ajax, это просто стандартная ссылка.

В Firefox, если я захожу в блог, то нажимаю обратно, сайт загружается правильно.Главная страница с загруженной навигацией и страница для просмотра в ней.

В Chrome, однако, если я нажимаю кнопку «Назад» из блога, «внешняя» страница не загружается, только содержимоезапрос ajax есть.Вам может понадобиться просмотреть его, чтобы полностью понять.

Это ошибка в Chrome или моей работе?Кажется, я не могу вернуться на страницу, которая была частично загружена с помощью xmlhttprequest, так как загружен только запрошенный элемент.

Сайт находится здесь: http://www.basmooarc.com

Спасибо

Ric

1 Ответ

4 голосов
/ 20 декабря 2011

короткий ответ

Добавление Cache-Control: no-store HTTP-заголовка для ответов XHR.

длинный ответ

Я уверен, что это ошибка в Chrome.Я нашел точно такую ​​же ошибку в своем приложении, и она отлично работает в Firefox, но не работает в Chrome.Я думаю, что проблема в том, что Chrome кэширует ответ XHR и передает его из кэша, когда вы нажимаете кнопку возврата.Мое приложение использует Etags, но Chrome не проверяет Etag.Он просто использует кэшированный ответ, в котором отсутствует весь внешний контент.Лучшее решение, которое я придумала, - это добавить no-store в заголовок элемента управления кешем для ответов XHR.

Вы можете увидеть его поведение на странице внутренних сетей Chrome.Введите chrome://net-internals в строке URL-адреса, откройте вкладку «События» и выполните действия, чтобы воспроизвести ошибку.Когда вы переходите на страницу без Ajax и затем нажимаете кнопку «Назад», вы увидите запись URL_REQUEST для URL страницы, на которую вы пытаетесь перейти, но Chrome просто проверяет кеш и все.Сравните это с обычным запросом этого URL.Обычный будет иметь проверку кэша, за которой следует раздел HTTP_TRANSACTION_SEND_REQUEST, где Chrome выполняет фактический HTTP-запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...