【问题标题】:Chrome doesn't cache hidden form field values for use in browser historyChrome 不会缓存隐藏的表单字段值以在浏览器历史记录中使用
【发布时间】:2011-04-30 20:43:27
【问题描述】:

我有一个包含文本框字段和隐藏字段的 ASP.Net Web 表单。隐藏字段值是使用客户端 JavaScript 动态修改的。发布表单、检查值并重定向到另一个页面都按预期工作。

但是,当我使用浏览器后退按钮显示上一页时,我希望看到所有表单字段仍填充有发布的值。

在 IE 和 Firefox 中,文本和隐藏输入字段都是这种情况。

在 Chrome 中,这仅适用于文本字段。隐藏字段的值丢失了。

在浏览浏览器历史记录时,Chrome 是否真的不会重新填充动态设置隐藏的表单字段值?

我已经将一个小样本放在一起来演示问题,如果需要,我可以提供。我想先问这个问题,看看这是否是众所周知的行为以及我必须接受的事情。

【问题讨论】:

    标签: google-chrome browser-history hidden-fields back-button


    【解决方案1】:

    我似乎无法发表评论,也许我的代表太低了,但我觉得这很重要。

    我自己在 Opera 中遇到了这个问题,所以借用了 Sanesh Fernando 的解决方案,该解决方案解决了未恢复的隐藏字段(感谢 Sanesh)。然而,给我带来的问题是 Javascript 在表单字段更新之前触发,所以如果您像我一样使用 javascript 检查值,那么我必须添加一个 setTimeout 以确保在检查值之前更新 Opera。

    Cookie 是另一种说法,但对于要求访问者同意使用 Cookie 的荒谬欧盟指令,这对我来说不是一个解决方案。

    【讨论】:

      【解决方案2】:

      这个问题可以用一个小技巧来解决。

      问题是 Chrome 浏览器无法正确处理 Type=hidden 且动态设置值的表单字段。

      所以解决方法是将字段的类型更改为文本并使用其他方法隐藏可见文本框。这可以通过包围所有带有值的文本框来实现,这些文本框带有旨在被 DEV 标记对隐藏的值,并将样式指定为 display: none

      然后在页面上你不会看到带有隐藏值的文本框,它会在浏览器的 JavaScript 中正常工作。

      之前

      <input type=hidden name=item_no value=00001>
      

      之后

      <div style="display: none">
          <input type=text name=item_no value=00001>
      </div>
      

      【讨论】:

      • 不错的把戏。我想我最后甚至可能做了类似的事情。这是一种系统,它不会打扰我这样做。反正日子已经屈指可数了。我闭上了眼睛……做出了改变……晚上仍然可以睡觉
      【解决方案3】:

      您不应依赖此行为。不同的浏览器是不同的,甚至在不同的浏览器版本之间也是如此。此行为未在任何标准中描述。如果您希望您的字段具有特定值,您可以使用 cookie,或者在页面加载时始终向服务器发出请求,或者使用更现代的方法,例如本地存储(虽然它没有得到广泛支持)。

      【讨论】:

      • 感谢您的回复,尽管阅读它让我感到难过。我正在处理一个极其复杂的遗留高级搜索,我们一直依靠后台功能来重新填充条件。短期:我将不得不破解它,直到我们可以将此页面的重写滑入积压工作。哦,好吧...
      • 这确实是 Chrome 独有的行为,我觉得这很奇怪。我对此进行了一些研究,您可以在以下位置找到:wiki.orbeon.com/forms/doc/contributor-guide/…
      猜你喜欢
      • 1970-01-01
      • 2013-12-27
      • 2011-04-16
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      相关资源
      最近更新 更多