【问题标题】:PHP header redirection does not reload <iframe> in IEPHP 标头重定向不会在 IE 中重新加载 <iframe>
【发布时间】:2011-02-26 03:33:11
【问题描述】:

显示来自 DB 的数据时我通常会遇到这种情况

  1. 我在显示来自 DB 的数据的 A.php 页面中,
  2. 用户执行一些操作(如编辑/删除等)并加载页面 B.php 以执行该操作,
  3. 一旦页面 B 执行操作,它将浏览器重定向到页面 A,
  4. 页面 A 在步骤 (3) 期间自动重新加载,因此它显示了数据的更新情况

为了使页面 B 重定向到页面 A,我使用了一个简单的 PHP

header("Location: " . "A.php", TRUE, 302);

这适用于所有情况,除了页面 A.php 显示为 &lt;iframe&gt; 时:在这种情况下它不会重新加载(第 4 步没有完成)。 这似乎只发生在 IE7 中(不知道 IE8),它在 FF/Safari 上完美运行。 只有在使用&lt;iframe&gt; 时,如果页面 A.php 不在&lt;iframe&gt; 中,它也会在 IE7 中刷新。

为了解决这个问题,我只是在页面 A.php 中添加了几个标题以将其设置为不被缓存:

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

但我很好奇您过去是否也遇到过同样的问题,您能否就此给我一些建议?

【问题讨论】:

    标签: php internet-explorer iframe header reload


    【解决方案1】:

    我在 IE11 之前看到过这种情况。首先,在某些情况下,当您的重定向 URL 与原始 iframe URL 具有相同的协议时,IE 会播放得更好。

    此外,许多人能够通过添加 P3P 标头来解决类似问题。尝试在发送重定向标头之前添加:header('P3P: CP="CAO PSA OUR"')

    【讨论】:

      【解决方案2】:

      内容是否与“外部”框架在同一个域中?

      如果没有,您可能需要提供完整路径“http://...etc”。在 header() 调用中。

      【讨论】:

      • 我总是在标头中提供完整的 url,它是 HTTP 要求。
      【解决方案3】:

      您正在使用会话吗?如果是这样,您能否在没有会话且没有修复的情况下再次测试您的场景?

      您所做的修复处理缓存控制和过期,由session_start() 和/或session_cache_limiter() 更改。不过,这种行为很奇怪,可能是 IE-7 特有的错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 2018-12-11
        • 1970-01-01
        • 2014-05-06
        • 1970-01-01
        相关资源
        最近更新 更多