Chrome/Safari 中的后退按钮错误

Posted

技术标签:

【中文标题】Chrome/Safari 中的后退按钮错误【英文标题】:Back button bug in Chrome/Safari 【发布时间】:2011-06-17 10:28:31 【问题描述】:

我一直在尝试找到解决 Safari/Chrome 中后退按钮错误的解决方法(浏览器将虚假数据放在不属于它们的字段中)。我没有运气,现在看来应该有一个很好的解决方案(我看到关于这个问题的帖子可以追溯到 2009 年,但没有很好的解决方案)。

在本例中:http://jsfiddle.net/eGutT/13/

您可以看到在初始页面加载时一切正常。但是,在单击链接后,然后单击浏览器上的后退按钮,值会传播到错误的字段。请使用 Safari 或 Chrome 进行测试。它在 Firefox 上运行良好。

这是一个非常严重的问题,尤其是在:

    用户点击返回按钮,出现此错误 用户没有注意到虚假数据 用户对表单进行了一些不相关的更改(在不同的未受影响的字段中) 用户提交表单

现在您面临的情况是虚假数据被提交到数据库!

顺便说一句,这个问题可能与 jQuery 有关,因为如果您在示例中取消注释此行:

updateRowNums();  // IF YOU COMMENT OUT THIS LINE...

不会引入额外/虚假数据。

谢谢, 盖伦

【问题讨论】:

jQuery finding wrong elements under Chrome的可能重复 谢谢,您已经解决了其他帖子中的问题。尽管具有 name 属性是一种解决方法,但它仍然是一个 webkit 错误。换句话说,如果 webkit 不确定要填充的字段,它不应该随意选择一个:) 以防万一用户今天仍然遇到这个问题:了解 bfcache(例如通过this blog post)并查看here 如何挂钩一些代码以进行整理前一页状态。 【参考方案1】:

您是在谈论 0、1 和 2 吗?因为您的函数 updateRowNums 会自动强制这些值。如果您想保留第一列,可以将updateRowNums 更改为如下内容:

if (!$('#some_id').val())  $('#some_id').val(x); 

(显然这不是最有效的代码,但如果不存在值,它会重置字段。)

但是,如果不是您在说什么,那么我无法重现您的问题。我使用的是 Chrome 9.0.597.83,它在所有正确的位置保存了所有正确的数据。

【讨论】:

嗯,我在 Mac 上使用的是完全相同的 Chrome 版本。问题不在于我不想设置一个已经设置的值(就像你建议的那样)。问题是当您返回该页面时,其他不相关的字段(具有完全不同的 ID)会采用其他字段的值。正如我所发现的,这实际上与 jQuery 无关。这个例子没有使用jQuery,有问题:jsfiddle.net/rwaldron/UvmDv/7

以上是关于Chrome/Safari 中的后退按钮错误的主要内容,如果未能解决你的问题,请参考以下文章

Segue 使用错误的动画和后退按钮未显示 [关闭]

Chrome + Safari 不透明度转换错误创建 st

视频循环自动播放在 Chrome/safari 上不起作用(webkit 错误)

使用带有 Flutter 后退按钮的 onGenerateRoute 时断言失败

Firefox、Chrome、Safari、IE 等的 js 递归限制是多少?

带有自定义后退按钮字体的错误大标题动画