Javascript Chrome:禁用哈希更改的预呈现

Javascript Chrome:禁用哈希更改的预呈现,javascript,html,google-chrome,prefetch,Javascript,Html,Google Chrome,Prefetch,我们正在开发一个web应用程序,通过更改页面的散列来处理状态更改,例如example.com//page1 最近,我在Google Chrome上遇到了一个问题,即启用了预回迁选项预测网络操作以提高页面加载性能。在不同的路由中,我们有/logout来执行注销。 在正常状态下,我在主页的example.com//页面上,当我在example.com//之后开始键入l时,Chrome会自动完成注销。但是,它不仅会自动完成,而且还会调用haschange事件,因此客户端会向服务器发送注销请求。。。甚至

我们正在开发一个web应用程序,通过更改页面的散列来处理状态更改,例如example.com//page1

最近,我在Google Chrome上遇到了一个问题,即启用了预回迁选项预测网络操作以提高页面加载性能。在不同的路由中,我们有/logout来执行注销。 在正常状态下,我在主页的example.com//页面上,当我在example.com//之后开始键入l时,Chrome会自动完成注销。但是,它不仅会自动完成,而且还会调用haschange事件,因此客户端会向服务器发送注销请求。。。甚至只需输入一个l

这种行为不仅出乎意料,而且很危险。除了在默认打开的“设置”页面中取消选中“预测网络操作”以提高页面加载性能外,还有什么方法可以防止Chrome这样做

编辑


一个小小的新发现。实际上,Chrome没有触发hashchange事件,因为没有执行事件处理程序中的console.log。Chrome了解到,当访问/logout页面时,会调用对服务器GET/auth/destroy的请求,因此它会自行启动该请求!我们能做些什么来阻止这一切?

回答我自己的问题。这不是一个真正的解决方案,而是一个变通办法

根据,prendering在某些情况下是禁用的:在我们的情况下,POST请求不是选项,并且资源通过HTTPS提供服务。
因为我们已经准备在生产环境中启用HTTPS,所以我们也在开发环境中启用了它,问题就消失了。但是,我仍然觉得这更像是一种变通方法,而不是真正的解决方案。

为什么仍然使用hashchange事件?您仍然支持旧的IE版本吗?@epascarello不是因为IE支持,而是因为其他超出问题范围的原因。GMail本身最终会使用hashchange事件。显然,启用HTTPS会禁用预取。不过,如果知道是否还有其他方法,那就太好了。现在看来,即使在prerender中,POST请求也会被触发。我没有任何来源,但我的身份验证系统能够通过POST请求刷新我的令牌,即使document.visibilityState===prerender。使用铬46.0.2490.80 m