我们正在开发一个Web应用程序,通过更改页面的哈希值来处理状态更改(例如example.com/#/page1
)。
最近,当启用了预取选项时,我已经遇到了谷歌浏览器的问题("预测网络操作以提高页面加载性能")。在不同的路线中,我们有#/logout
执行注销
在"正常"状态,我在页面example.com/#/
(主页面)上,当我开始输入" l"之后(example.com/#/l
),Chrome会自动填充logout
。但是,它不仅会自动完成,而且还会调用" haschange"事件,所以客户端正在发送一个注销到服务器的请求......即使只是输入l
!
这种行为不仅意外,而且也很危险。除了取消选中"预测网络操作以提高页面加载性能"在设置页面(默认情况下已启用)中,有没有办法阻止Chrome执行此操作?
修改
一个小小的新发现"。实际上,Chrome并未触发" hashchange"事件,因为事件处理程序中的console.log未被执行。 Chrome了解到,在访问#/logout
页面时,系统会调用对服务器(GET /auth/destroy
)的请求,因此它会自行解雇!我们可以做些什么来阻止这种情况?
答案 0 :(得分:0)
回答我自己的问题。这不是一个真正的解决方案,而是一种解决方法。
根据this documentation,在某些情况下禁用预呈现:使用POST请求(在我们的示例中不是选项)以及通过HTTPS提供资源时。 由于我们已经在生产环境中启用HTTPS,我们只是在开发环境中启用它,问题就消失了。但是,我仍然觉得这更像是一种解决方法,而不是一种真正的解决方案。