Firefox 似乎保存了整个页面状态,包括 javascript 变量和 DOM 的值,并在用户点击返回按钮时恢复它。如何防止这种行为?
服务器端的缓存被阻止:
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache,no-store,private,must-revalidate,max-stale=0,post-check=0,pre-check=0");
header("Pragma: no-cache");
页面上的所有表单都有autocomplete='off'
,所有隐藏的输入元素也有。
onload
事件不会被触发。
有没有办法告诉 Firefox 在提交表单后完全忘记页面状态?在将强制页面重新加载的 onsbumit 处理程序中设置超时是一个坏主意,因为下一页可能会在不可预测的时间内做出反应。在长响应的情况下重新加载将中断请求。
如何重现:
<body>
<form method='POST' action='http://httpbin.org/post' autocomplete='off'>
<input type='text' placeholder='Enter something' name='data' autocomplete='off'/>
<input type='hidden' name='token' value='and_token_field_that_must_not_be_cached' autocomplete='off'/>
<input type='submit' />
</form>
<span id='counter'></span>
<script>
var tick = 0;
setInterval(function () {
document.getElementById('counter').innerHTML = tick ++;
}, 300);
</script>
</body>
稍等,按提交,然后返回。FF 将显示与页面提交前相同的计数器值,Chrome 将重置它。