У меня есть приведенный ниже HTML-код, который обслуживается из GET /home
и использует Javascript для перехвата события отправки формы, чтобы изменить метод с POST на DELETE. Сервер прослушивает запросы к DELETE /delete
, которые фактически возвращают перенаправление 303 на GET /new
, которое обслуживает некоторый HTML. Javascript обновляет адресную строку до example.com/new
, используя API истории, и отображает HTML, используя window.document.documentElement.innerHTML = text
. Все это работает, и когда я нажимаю кнопку «Назад», адресная строка ДЕЙСТВИТЕЛЬНО меняется на предыдущий адрес (example.com/home), но HTML не отображается. Почему это? Я прочитал документацию Mozilla, но не могу найти что-нибудь о том, чтобы не отображать HTML, конечно, если кнопка «Назад» обновляет адресную строку, страница должна быть обновлена до этого URL-адреса? Я также пытался использовать history.replaceState()
, но это не сработало.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<form action="/delete" method="POST">
<input type="submit" value="submit" />
<input name="key" value="val" />
</form>
</body>
<script>
const form = document.querySelector("form");
form.addEventListener("submit", async e => {
e.preventDefault();
console.log(new URLSearchParams(new FormData(e.currentTarget)));
const response = await fetch(form.action, {
body: new URLSearchParams(new FormData(e.currentTarget)),
method: "DELETE",
redirect: "follow",
});
const text = await response.text();
history.pushState({}, "", response.url);
// history.replaceState({}, "", response.url);
window.document.documentElement.innerHTML = text;
});
</script>
</html>