【问题标题】:Internet Explorer reloads IFrameInternet Explorer 重新加载 IFrame
【发布时间】:2016-05-04 08:38:30
【问题描述】:

我有一个网络表单(使用 ZK 框架),比如说 http://www.example.com/myform

这个表单包含在我的主页(例如 http://www.anotherexample.com)的 iframe 中。

现在奇怪的是:

在 Internet Explorer 9-11 中,每当我取消聚焦某个字段时,IFrame 都会完全重新加载(那里会进行一些字段检查)。但这仅发生在 IE 和 IFrame 中。如果我直接加载 http://www.example.com/myform,它可以正常工作。

让整个事情变得奇怪的另一个细节是:如果我在 IE 中额外打开一个选项卡并在那里加载 http://www.example.com/myform,iframe 突然也可以正常工作(重新加载后)。

不幸的是,IE 在重新加载 iframe 时没有显示任何错误,所以我不知道发生了什么以及为什么。其他浏览器(Firefox、Chrome)与 IFrame 完美配合。

任何线索可能是什么原因?

【问题讨论】:

    标签: javascript iframe internet-explorer-11 zk


    【解决方案1】:

    在这种情况下,原因是 P3P,如下所述:https://blogs.msdn.microsoft.com/ieinternals/2013/09/17/a-quick-look-at-p3p/

    简而言之,Internet Explorer 在 iframe 等中拒绝来自第三方上下文(不同域)的 cookie。这当然会导致提到的行为:

    • 发送到 ZK 后端的任何请求(包括触发“焦点丢失”的请求)都没有会话 ID(因为没有 cookie),因此 ZK 将触发完全重新加载。
    • 在另一个选项卡中打开 ZK 应用程序允许它创建一个 cookie - 然后 iframe 内的 ZK 应用程序可以访问

    解决方案是发送正确的 P3P 标头,在 ZK 中,这可以通过多种方式完成,例如通过 .zul file header directive、在 servlet 过滤器中或直接在网络服务器上。完成此操作后,应用程序在 IE 9-11 中按预期工作。

    【讨论】:

      猜你喜欢
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      相关资源
      最近更新 更多