Javascript 浏览器缓存正在破坏我的客户端路由器

Javascript 浏览器缓存正在破坏我的客户端路由器,javascript,html,url,browser,Javascript,Html,Url,Browser,我正在开发一个web应用程序,我使用客户端路由,基本上,我们使用URL中后面的内容加载页面 但是,我注意到,有时当我浏览一个页面,又浏览另一个页面时,会加载旧页面而不是新页面。让我解释一下,当我点击链接去任何我想去的地方时,我所在的页面正在加载 我高度怀疑浏览器缓存正在覆盖新内容 我仍然不知道为什么它只会偶尔发生,尤其是当它是一个新的浏览器窗口时 是否有任何解决方案可以强制浏览器打开新页面,例如在另一个页面中打开该页面,然后关闭旧选项卡 编辑 我目前正在使用GitHub页面托管我的项目,因此在您

我正在开发一个web应用程序,我使用客户端路由,基本上,我们使用URL中后面的内容加载页面

但是,我注意到,有时当我浏览一个页面,又浏览另一个页面时,会加载旧页面而不是新页面。让我解释一下,当我点击链接去任何我想去的地方时,我所在的页面正在加载

我高度怀疑浏览器缓存正在覆盖新内容

我仍然不知道为什么它只会偶尔发生,尤其是当它是一个新的浏览器窗口时

是否有任何解决方案可以强制浏览器打开新页面,例如在另一个页面中打开该页面,然后关闭旧选项卡

编辑


我目前正在使用GitHub页面托管我的项目,因此在您的回答中,请确保所有内容都是客户端的您可以在服务器上对所有请求设置以下标题:

Cache-Control: no-cache 
这将禁用该文件/响应的缓存。如果您使用的是expressJS服务器,则可以将其设置为:

function nocache(req, res, next) {
  res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
  res.header('Expires', '-1');
  res.header('Pragma', 'no-cache');
  next();
}
并将此函数用作所有要禁用缓存的路由的中间件


您可以在

上阅读有关缓存头的更多信息。我找到了一个解决方案:在新选项卡中打开我的链接,同时关闭旧选项卡

这可以使用以下代码完成:

el.addEventListener("click", e => {
    e.preventDefault();
    window.open(el.href, "_blank")
    window.close()
})

很抱歉,我目前正在使用GitHub页面来托管我的项目,因此我无法控制标题。在那里无法执行此操作。但是他们设定的缓存到期时间是600秒。每次强制重新加载或等待10分钟。你可以转移到其他托管服务吗?我只是有一个问题,如果页面在缓存中,DOMContentLoaded事件是否仍然会触发?因为如果内容启动,我可以强制重新加载。即使你强制重新加载,它仍然会从缓存中重新加载。这是一个服务器端的东西。如果您发送了一个GET请求,请求的页面具有相同的标题,不管它是否使用JS发送,它都会说您在本地拥有的副本仍然是新的,您可以使用它。然后你的浏览器将继续呈现该内容。不,如果它启动,并且如果我可以在散列后获得正确的内容,那么它将工作。至少在这种情况下,你到底是如何加载新内容的?如果你跟随的链接具有相同的URL,只是不同的锚定,那么页面将不会重新加载。@Matus好吧,我有一个充当菜单的页面,这些链接都指向一个URL,如/foo/barsomething。另外,为了确保这是缓存问题,您可以使用开发工具禁用缓存并查看它是否解决了问题,以确保您正在尝试解决真正的问题。我理解,但是从/foo/barsomething到/foo/barsomethingese将不会加载页面,那么您加载新内容的情况如何?有些代码会help@Matus我试图禁用缓存,它解决了我的问题。如果你愿意,我可以提供URL。