2014-11-17 8 views
0

Мы разрабатываем веб-приложение, которое обрабатывает изменение состояния посредством изменения хэша страницы (например, example.com/#/page1).Хром: отключить предварительную визуализацию изменения хэша

В последнее время у меня возникла проблема с Google Chrome, когда включена опция предварительной выборки («Предсказывать сетевые действия для повышения производительности загрузки страницы»). Среди различных маршрутов у нас есть #/logout, который выполняет выход из системы.
В «нормальном» состоянии я нахожусь на странице example.com/#/ (на главной странице), и после того, как я начинаю вводить «l» после этого (example.com/#/l), автозаполнение Chrome выполняется с logout. Однако он не только автозаполняет, но также вызывает событие «haschange», поэтому клиент отправляет запрос на выход на сервер ... Даже просто набрав l!

Такое поведение не только неожиданно, но и опасно. Помимо снятия отметки «Предсказывать сетевые действия для повышения производительности загрузки страниц» на странице настроек (которая включена по умолчанию), есть ли способ предотвратить Chrome для этого?

EDIT

Небольшое новое "открытие". На самом деле Chrome не запускает событие «hashchange», поскольку console.log в обработчике событий не выполняется. Хром узнал, что при посещении страницы #/logout запрос на сервер (GET /auth/destroy) вызывается, и поэтому он запускает его сам по себе! Что мы можем сделать, чтобы остановить это?

+0

Почему вы все еще используете события hashchange? Вы по-прежнему поддерживаете старые версии IE? – epascarello

+0

@epascarello Не из-за поддержки IE, а по другим причинам, выходящим за рамки вопроса. GMail сам использует события hashchange, в конце концов. – Qualcuno

+0

Очевидно, что включение HTTPS отключает предварительную выборку (на https://developers.google.com/chrome/whitepapers/prerender ). Однако было бы неплохо узнать, есть ли другие способы. – Qualcuno

ответ

0

Ответ на мой вопрос. На самом деле это не решение, а обходное решение.

В соответствии с this documentation, предварительная обработка запрещена в определенных ситуациях: с запросами POST (в нашем случае это не опция) и когда ресурсы подаются через HTTPS.
Поскольку мы уже собирались включить HTTPS в производственной среде, мы просто включили его в разработку, а проблема исчезла. Тем не менее, я все еще чувствую, что это скорее обходное решение, чем реальное решение.

+0

Кажется, что запросы POST сейчас запущены даже в prerender. У меня нет источников, но моя система auth может обновлять токены через запрос POST, даже когда '' 'document.visibilityState ===" prerender "' ''. (С использованием Chrome 46.0.2490.80 м) – gligoran

 Смежные вопросы

  • Нет связанных вопросов^_^