internet-explorer - 浏览器后退按钮恢复空字段

标签 internet-explorer back-button

我有一个网页 x.php (在我网站的密码保护区域)它有一个表单和一个使用 POST 的按钮。发送表单数据并打开的方法 x.php#abc .这很好用。

但是,如果用户决定在 Internet Explorer 7 中导航回原来的 x.php 中的所有字段。清除所有内容,必须再次输入。我无法在 session 中保存发布的信息,我试图了解如何让 IE7 以我想要的方式运行。

我在网上搜索并找到了表明 HTTP header 应包含显式缓存信息的答案。目前,我试过这个:

session_name("FOO");
session_start();
header("Pragma: public");
header("Expires: Fri, 7 Nov 2008 23:00:00 GMT");
header("Cache-Control: public, max-age=3600, must-revalidate");
header("Last-Modified: Thu, 30 Oct 2008 17:00:00 GMT");

及其变体。没有成功。使用诸如 WireShark 之类的工具查看返回的标题向我展示了 Apache 确实尊重我的标题。

所以我的问题是:我做错了什么?

最佳答案

IE 将自动保留后退按钮上的表单内容,只要:

  • 您没有使用 no-cache pragma 或类似指令破坏缓存
  • 有问题的表单字段不是由脚本动态创建的

  • 您似乎手头有缓存,所以我猜后者可能适用。 (正如 mkoeller 所说,如果页面在最后几次后退点击中,Firefox 可以避免这个问题,方法是让页面本身在屏幕上的存活时间比它在屏幕上的时间长。但是这是可选的,Firefox 将恢复到与 IE 和其他相同的行为一旦您浏览了几页之前的浏览器并且旧的已经过期。)

    如果您从脚本 onload 创建自己的表单字段,那么浏览器无法知道新输入控件与旧实例“相同”,因此无法使用之前提交的值填充它.在这种情况下,如果您希望它与后退按钮一起玩得很好,您必须开始在客户端上存储数据。

    然后您必须使用某种状态键控,以便每组数据都与页面的一个实例相关联,否则通过同一表单的多个实例或同时在表单上打开两个浏览器选项卡会严重混淆你的脚本。

    然后你开始收集大量数据,如果它们是大表单,如果你使用的客户端存储机制是 cookie,你可能会开始丢失数据,以及发送大量不必要的状态废话每个 HTTP 请求。其他客户端存储机制也可用,但它们是特定于浏览器的。

    简而言之:很好地处理动态生成的表单是一个巨大的痛苦,如果可以的话,最好避免。在页面上有一个脚本使可见的隐藏表单,从而允许浏览器执行他们的领域内存魔法而不是给你任务,通常要容易得多。

    关于internet-explorer - 浏览器后退按钮恢复空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/261351/

    相关文章:

    c++ - 如何捕获从 MFC web 浏览器 c++ 发出的 GET/POST 请求

    Swift 4 从后退按钮中删除文本

    php - 表单提交后自动开始文件下载

    android - 按后退按钮取消异步任务下载

    javascript - 网络错误 12152 : WebSockets in Edge and IE 11

    c# - 使用 explorer.document 作为 HtmlAgilityPack 的源 HtmlDocument

    javascript - .click() 在 IE11 中拒绝访问

    javascript - jQuery 伪选择器 ":not"IE7 不工作?

    jsp - 从 Jsp 页面插入表中的冗余数据