由于 bfcache,在 Safari 中 "back" 后按钮保持禁用状态

Button stays disabled after "back" in safari due to bfcache

我使用

提交表单
$('#submitbutton').attr('disabled','true');
setTimeout(function(){ $("#myform").submit(); }, 100);

在safari中,点击浏览器的后退按钮返回本页时,该按钮仍处于禁用状态。

我试过添加:

$( document ).ready(function() {
    $('#submitbutton').removeAttr("disabled");
...

但这也不管用。

网上查了一下,好像跟bfcache有关。 虽然我理解这个缓存的概念,以及它如何提高加载速度,但我不希望它出现在这个页面上。是否有一个简单的解决方案来禁用它,跨浏览器?我在网上找到的解决方案都是 2-5 年的,并且不起作用。

请注意,在 Chrome 中,一切正常:按钮已启用,并且我的所有 JS 在单击后退按钮后都已执行。

我可以实现诸如启用页面离开按钮之类的功能,但我真的不喜欢不同浏览器中的这种不同行为。所以我想为所有浏览器禁用 bfcache,或者,在所有浏览器中使用 bfcache。

注意:我不想在单击后退按钮后强制刷新页面,因为这在我的页面上看起来非常丑陋和笨重。

通过添加此 PHP 代码使其工作:

<?php
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
?>

事件pageshow即使在bfcache也可以触发,所以你的js代码是这样写的:

window.addEventListener('pageshow', function( e ){
    //your code
});