History.replaceState не работает для firefox v56 +

В моем приложении Чтобы скрыть некоторую информацию в URL-адресе, я использую приведенный ниже код.

history.replaceState ({}, "", "bar.html");

Работает во всех браузерах кроме последней версии firefox (v56 +)

В Firefox, если я нажму F5, он вернется к предыдущему URL-адресу, который я уже заменил приведенным выше кодом.

Любая помощь будет принята с благодарностью.

вы узнали что-нибудь по этому поводу? я боролся с ошибкой с похожими симптомами

Eliran Malka 24.04.2019 15:03

В последней версии Firefox эта ошибка кажется исправленной. Попробуй!

Jayesh Dhandha 24.04.2019 15:40

о, блин, я надеялся на воспроизведение последней версии (я вижу это в кванте Firefox, то есть 66.0.3 64-бит). какая именно версия у вас сейчас как последний, кстати?

Eliran Malka 24.04.2019 17:32

Что ж, я понимаю вашу проблему и затрудняюсь ответить :( Что я заметил в связи с этой проблемой, так это то, что она появляется в определенных версиях после 56. * Но я не уверен, в какой версии она будет исправлена. Я также правильно использую версию 66 сейчас.

Jayesh Dhandha 25.04.2019 08:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
4
1 056
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть открытый выпуск на Bugzilla.

Видео Пример 1 и Видео Пример 2 объясняют, как воспроизвести ошибку.

Conditions:

  1. Mozilla Firefox version only 56+
  2. Single Page Application
  3. For routing uses history.replaceState, all parameters not null

Steps:

  1. Login & redirect to main page base URL
  2. Navigate on any application tab & replace URL parameters
  3. Press F5, cmd + r or click Refresh button
  4. Ups!.. Again open main page with base URL (but in other browsers we see the selected tab and the correct URL)

Такое же поведение наблюдается при удалении строк запроса из URL-адреса.

Это могло быть вызвано следующим поведением (цитирую Вадим Гончаров)

The main problem is that after using history.replaceState and then clicking cmd+r/f5 we will see that browser sends replaced (correct)url to server, but shows incorrect url both in location.search and browser url bar. And this behaviour continues (if click to "cmd+r/f5") until we click "enter" on browser url bar.

Первый Обходной путь отправлен из Феликс Ли

Before calling history.replaceState, do location.hash = location.hash;

Setting hash to itself has no effect, but makes the bug go away.

Этот обходной путь не идеален, и Мтомаллея добавляет второй обходной путь

The browser is requesting a different URL than what is shown in the location bar....

Additionally, the workaround isn't ideal because if the URL doesn't already have a hash, location.hash = location.hash adds one, calls popstate, and adds a history entry.

An alternate workaround that is much less simple:

  1. Use whatever means available to your backend technology to expose the request URI on the client
  2. On page load (before any client routing code), check the URI against window.location
  3. If they're different, use replaceState to fix it.

The location will briefly show the incorrect URL on any reload, but at least it'll be fixed and routing can work as expected...

Третье решение предложено из Матис Виль

window.addEventListener('unload', function(event) { location.replace(location) });

This way the state of the js location is flushed to FFs location in cases of refreshes and tab closes (which by the way have the same issue when reopened with e.g. ⌘+⇧+t).

Вышеупомянутый обходной путь от Матис имеет следующую проблему (я цитирую Джиммихмиллер)

Next.js tried using the workaround that Mathis mentioned above and it caused some bad issues for them. Details here: https://github.com/zeit/next.js/pull/6896

Возникла новая ошибка с указанным выше обходной путь, объясненная в проблеме # 6882

when landing on a page that contains query parameters, the browser becomes "locked" to that page and programmatically or manually navigating to a different same-domain page insta-redirects back to the original. note that this does not start happening until a query parameter is involved in the url, totally bizarre

Я также включаю список другие связанные с Mozilla проблемы с history.replaceState.

Я остаюсь доступным для дальнейшего анализа, исследования и улучшения этих сообщений, и я рад получить ваши отзывы.

@Eliran Malka есть открытый выпуск в Bugzilla. Я включил решения в свой ответ. Я счастлив переписать ответ, расширить свой поиск и внести улучшения.

Fabrizio Bertoglio 30.04.2019 21:33

@EliranMalka, с удовольствием! :-) Спасибо

Fabrizio Bertoglio 01.05.2019 13:19

@EliranMalka спасибо за награду, пожалуйста, свяжитесь со мной для получения дополнительной помощи

Fabrizio Bertoglio 02.05.2019 14:15

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