Javascript 以前的HTML赢得';t在history.pushState()之后使用“后退”按钮进行渲染

Javascript 以前的HTML赢得';t在history.pushState()之后使用“后退”按钮进行渲染,javascript,html5-history,Javascript,Html5 History,我有下面的HTML,它来自GET/home,并使用Javascript劫持表单提交事件,以便将方法从POST更改为DELETE。侦听DELETE/DELETE请求的服务器实际上返回一个303重定向到GET/new,该重定向提供一些HTML。Javascript使用历史API将地址栏更新为example.com/new,并使用window.document.documentElement.innerHTML=text呈现HTML。这是所有工作都可以找到的,当我单击“上一步”按钮时,地址栏确实会更改

我有下面的HTML,它来自
GET/home
,并使用Javascript劫持表单提交事件,以便将方法从POST更改为DELETE。侦听
DELETE/DELETE
请求的服务器实际上返回一个303重定向到
GET/new
,该重定向提供一些HTML。Javascript使用历史API将地址栏更新为
example.com/new
,并使用
window.document.documentElement.innerHTML=text
呈现HTML。这是所有工作都可以找到的,当我单击“上一步”按钮时,地址栏确实会更改回以前的地址(example.com/home),但HTML不会呈现。为什么会这样?我已经阅读了,但是我找不到任何关于不呈现HTML的内容,当然,如果后退按钮更新地址栏,页面应该更新到该URL?我还尝试使用
history.replaceState()
,但没有成功


文件
const form=document.querySelector(“表单”);
form.addEventListener(“提交”,异步e=>{
e、 预防默认值();
log(新的URLSearchParams(新的FormData(e.currentTarget));
const response=等待获取(form.action{
正文:新的URLSearchParams(新的FormData(e.currentTarget)),
方法:“删除”,
重定向:“跟随”,
});
const text=等待响应。text();
pushState({},“,response.url);
//replaceState({},“,response.url);
window.document.documentElement.innerHTML=文本;
});

根据您的代码,您正在替换innerHTML,其中也包括脚本部分。请将脚本移动到head标记(如果可能的话),或者替换整个文档的innerHTML,创建父div并替换该div的内容

所以不是这个-

window.document.documentElement.innerHTML = text;
这样做-

documemt.getElementById('SomeDIV').innerHTML = text;

将脚本放入似乎不起作用,因为DOM将没有加载,所以当脚本运行时,它将找不到表单元素。我无法将内容包装在div中,最好的解决方案似乎是替换document.body,但这似乎也破坏了脚本。我尝试使用
window.onload=()=>{myscript}
并将脚本放在头部。脚本现在成功运行并找到表单,但是原始问题没有解决-当使用“后退”按钮导航到时,不会呈现上一页。