Что-то связанное с этим вопросом, который я задал, я обнаружил довольно неприятную ошибку /детали реализации в мобильном Chrome при взаимодействии с API истории через redux-simple-router & реагировать на маршрутизатор.
Мой сценарий прост; мое приложение имеет несколько URL-адресов (сделанных с использованием объекта истории браузера). Для примера предположим, что это /
/product
и /contact
. Только на маршруте /
и маршруте /
у меня есть форма регистрации и в компоненте заголовка (я также использую React) кнопка регистрации, которая напрямую связана с этой панелью регистрации.
Как я реализовал это в моем компоненте приложения верхнего уровня, который у меня есть:
browserHistory.listen(location => {
if (typeof location.state === 'undefined' || location.state === null) {
window.scrollTo(0, 0);
}
});
который при каждом изменении страницы будет прокручиваться вверх страницы. Однако, если есть смена страницы и состояние местоположения не равно нулю, например signup
, при прокрутке ничего не произойдет. Затем на странице, которая обрабатывает рендеринг для моего маршрута /
, я проверяю состояние, чтобы увидеть, равно ли оно signup
, и если да, я прокручиваю до компонента формы регистрации.
Навигация достигается с помощью создателей действий из redux-simple-router
:
dispatch(routeActions.push({ pathname: '/', state: 'signup' }));
В каждом мобильном браузере это действие работает отлично. Однако в мобильном Chrome каждое действие маршрута, независимо от того, запускаю ли я его с помощью создателя действия или компонента Link
из реагирующего маршрутизатора, запускает обновление страницы во время навигации, и приложение теряет состояние. Поэтому, если я нажимаю кнопку регистрации, срабатывает изменение страницы, а затем состояние теряется, поэтому, когда страница проверяет this.props.location.state
, она сбрасывается на ноль.
Теперь я всесторонне протестировал это, у меня нет проблем с настольным Chrome, Firefox или Safari, и то же самое с Firefox, Opera и Safari на iOS. Каждое действие routeActions.push
запускает смену страницы и сохраняет состояние.
Кто-нибудь знает, что здесь происходит? Я часами бился головой о стену, пытаясь понять, почему это не работает только в Chrome на iOS. Это просто деталь реализации API истории Chrome? И если да, то почему это не влияет на браузер Chrome на рабочем столе?
location
, учитывая, что местоположение является объектом наwindow
в большинстве браузеров и, следовательно, доступно в глобальной области. Я знаю, что это не должно иметь значения, потому что переназначают имя в функциональной области. Это просто идея. - person eblahm   schedule 20.01.2016