Polymer app-route: перехватить страницу обновления

Я борюсь с выходом из текущей ситуации: у нас есть полимерный SPA (A), развернутый на определенном сервере и привязанный к определенному URL: http://example.com/A, нам нужно показать устаревшие страницы старое приложение, для этого было разработано новое приложение (B), привязанное к другому URL-адресу ( http://example.com/B).

Что делает B, так это создает кадры на страницах унаследованного приложения и предоставляет кнопку, цель которой - вернуться к предыдущему местоположению путем доступа к значению document.referrer и перезагрузки страницы, проблема в том, что, будучи A SPA, URL-адрес не существуют на сервере.

Подробнее:

  1. Пользователь входит в приложение A ( http://example.com/A/overview)
  2. Пользователь использует SPA и получает определенный URL-адрес, управляемый маршрутизацией ( http://example/A/stuff/we/sell/jackets)
  3. На странице http://example.com/A/stuff/we/sell/jackets есть ссылка на приложение B, обрамляющее страницу старого приложения с отображением курток.
  4. Пользователь щелкает ссылку и переходит на http://example.com/B/ legacy / jackets, на данный момент document.referrer равен http://example.com/A/ stuff / we / sell / jackets
  5. Пользователь нажимает на кнопку, чтобы закрыть представление, приложение B устанавливает местоположение окна для document.referrer, пытающегося высадить пользователя, откуда он / она пришел.
  6. Будучи приложением A SPA, URL-адрес http://example.com/A/ stuff / we / sell / jackets не существует на сервере, и пользователь получает (правильно) 404.

Поэтому возникает вопрос: есть ли способ перехватить изменение переменной window.location в маршрутизации приложения, чтобы избежать полного обновления страницы и отправить пользователя на страницу, где была ссылка?

2 ответа

Решение

Если я правильно понимаю, то это, похоже, проблема с конфигурацией вашего сервера.

Если у вас есть SPA, вы хотите, чтобы все URL попадали в вашу оболочку приложения (обычно это ваш index.html).

Пример:

http-root
├─ some-folder
│  └─ index.html
└─ index.html

Если у вас работает, например, Apache, вы можете перейти по адресу:

  • http://example.com/index.html
  • http://example.com/some-folder/index.html

Если вы идете в http://example.com/stuff/we/sell вы получите ошибку как stuff не является действительным каталогом.

В вашем SPA вы, вероятно, будете иметь какую-то систему маршрутизации, которая будет перемещать вас и вносит изменения в URL, даже не выполняя перезагрузку. Поэтому, если вы используете свой SPA, а затем делаете реальную перезагрузку, вы все равно должны оказаться в том месте, где вы были раньше.

Как это будет работать, зависит от вашего сервера. Для Apache, например, вы можете предоставить переписать через .htaccess,

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html[L]
</IfModule>

Используя это независимо от того, какой у вас URL, вы всегда будете в http-root index.html, Тогда ваш SPA может вступить во владение; прочитайте URL и покажите соответствующие данные.

Решение imho на сервере - это подходящее решение вашей проблемы.

Я согласен с @daKmoR. На самом деле вы никогда не должны получать 404 с сервера - вы можете получить это из полимерного приложения.

Получить файл и, если он не существует, попробуйте индексировать. Это выглядит по-разному на каждом сервере. Какой сервер вы используете? Я могу помочь с IIS и nginx.

Другие вопросы по тегам