我在StackOverflow上看到了相关的问题,但没有一个建议对我起作用。我需要浏览器每次显示页面时都从服务器重新加载页面,包括如果用户通过按下“后退”按钮到达该页面。似乎浏览器只遵循基本文档的缓存规则。这在Safari和Firefox的当前版本中发生(截至2013年12月),通过数据包捕获进行验证。
我的应用程序中的页面用于编辑数据库记录。源文件顶部有几行PHP代码,用于存储指示正在编辑记录的锁。其他用户在锁存在时无法编辑相同的记录。页面具有窗口unload
处理程序,使用非异步模式的AJAX释放锁定。(锁定机制还有更多内容,但这些是相关的部分。)当用户通过后退按钮返回页面时,服务器端代码永远不会被执行。
我尝试过包含一个头:
Cache-Control: no-cache, must-revalidate
Safari的检查器显示已经接收并处理了头部信息,但仍未重新获取页面。
我尝试设置一个处理程序来检查页面的状态是否得到维护:
window.onpageshow = function(event) {
if (event.persisted) {
window.location.reload();
}
};
if
条件从不匹配:event.persisted
始终为false。让人恼火的是,这似乎在技术上是正确的。根据HTML5规范的相关部分,由于页面注册了
unload
监听器,因此浏览器应该永远不会尝试维护页面状态。而它确实没有!当用户按下后退按钮时,浏览器会“重放”整个页面加载序列,包括ready
事件。它会再次执行任何未缓存先前结果的AJAX调用。它唯一拒绝从服务器实际重新加载的是主文档本身。如何使其重新加载主文档?